2017-02-19 1 views
2

C++의 Linux에서 일련의 코드를 정적 lib (.a)와 연결하여 공유 라이브러리를 작성합니다. 정적 라이브러리에서 정의 된 메서드가 있습니다. 내가 그 정적 라이브러리에서 심볼을 인쇄하는 나노 -C를 사용하는 경우와 같이 나타납니다C++ 정적 라이브러리의 std :: string과 관련된 정의되지 않은 기호

Alembic::AbcCoreFactory::v9::IFactory::getArchive(std::string const&, Alembic::AbcCoreFactory::v9::IFactory::CoreType&) 

기호는 파일 (나는 건물입니다 라이브러리) .SO 출력에 정의되지 않은,하지만 난 정의를 나열 할 때 나노 미터를 사용하여 심볼 -uc는 인쇄 :

Alembic::AbcCoreFactory::v9::IFactory::getArchive(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, Alembic::AbcCoreFactory::v9::IFactory::CoreType&) 

차이 한 제 사용 표준 : 문자열 CONST & 인 두 번째는 표준 : __ 1 :: basic_string, 표준 : __ 1 :: 할당> CONST & 사용

나는 그것이 아니오라고 이해하려고 노력하고 있습니다. 기호를 찾는. 그들이 본질적으로 동일하기 때문에 2 개가 일치해야하지 않습니까?

문맥에 대해, 나는 리눅스 용 Unreal Editor 4와 함께 제공되는 Alembic Importer를 컴파일하려고 시도하고 있습니다. 제가 링크하려고하는 라이브러리는 alembic 라이브러리입니다.

+0

질문이 명확하지 않습니다. "Linux에서 정적 lib (.a)를 공유 lib (.so)에 연결하는 것"은 무엇을 의미합니까? 기존 .a 파일을 가져 와서 .so 파일에 다시 연결 하시겠습니까? .a 파일을 기존 .so 파일과 연결하고 있습니까? "정적 lib 파일"파일을 연결하는 경우 "출력 .so 파일"은 어디에서 왔는지 갑자기. 질문을 더 분명하게해야합니다. –

+1

libstdC++ 대 libC++와 같을 수 있습니까? .a 빌드 할 때'-stdlib = libstdC++'을 사용하고 .so를 빌드 할 때'-stdlib = libC++'또는 그 반대로 할 수 있습니까? – Paul

+0

응답 해 주셔서 감사합니다. 언리얼 에디터 용 플러그인을 만들고 있는데이 플러그인은 공유 라이브러리 (최종 출력 .so)입니다. 이 공유 라이브러리는 정적 라이브러리에 의존합니다. 그래서 나는 많은 코드와 기존 .a 파일에서 새로운 .so 파일을 만들고있다. – Luke

답변

3

libc++ (clang의 표준 C++ 라이브러리) 및 libstdc++ (gcc의 표준 C++ 라이브러리)에 대해 컴파일 된 코드를 연결하려고합니다. 이것은 너무 잘 작동하지 않습니다.

라이브러리와 비교하여 확인하십시오. 내 시스템에서

:

> nm -DC /usr/lib64/libc++_shared.so | grep 'std::__1' 
    === lots of output === 
> nm -DC /usr/lib64/libc++_shared.so | grep 'std::basic' 
    === nothing === 
> nm -DC /usr/lib/gcc/x86_64-pc-linux-gnu/6.2.0/libstdc++.so.6 | grep 'std::__1' 
    === nothing === 
> nm -DC /usr/lib/gcc/x86_64-pc-linux-gnu/6.2.0/libstdc++.so.6 | grep 'std::basic' 
    === lots of output === 

파일이 다른 위치하지만 결과 수오에있을 수 시스템에는, 동일 거라고.

+0

나는 네가 맞다고 생각한다. 내가 충분히 평판을 얻으면 업보가 될 것이다. 감사! – Luke

관련 문제