어떤 정의가 extern "C" { ... }
으로 싸여있는 C++ 라이브러리 코드가 있다고 가정 해 보겠습니다.여러 C++ 및 C 오브젝트 파일에서 하나의 .so 생성하기
또한 해당 C++ 라이브러리를 사용하는 C 라이브러리 코드가 있습니다.
내가하고 싶은 것은 하나의 .so 파일을 만드는 것인데, dlopen
을 한 번만 호출하면이 라이브러리를 사용할 수 있습니다.
다음은 현재 내가하고있는 것입니다. -shared -rdynamic -fPIC
.so 파일로 내 C++ 라이브러리를 먼저 컴파일하고 있습니다. 그런 다음 동일한 매개 변수를 사용하여 C 라이브러리를 .so 파일로 컴파일합니다. 그 후 C 라이브러리를로드하기 전에 dload
으로 C++ 라이브러리를로드해야합니다. 그렇지 않으면 undefined symbol
오류로로드가 실패합니다.
나는이 두 라이브러리를 하나의 .so 파일로 컴파일하여 dload
에 대한 한 번만 호출하면 충분합니다.
어떻게하면됩니까?
미리 감사드립니다.
편집 : .o 파일로 컴파일 한 다음 결합이 작동하지 않습니다. 여기에 내가 할 수있는 작업은 다음과 같습니다
- 나는
undefined symbol: __gxx_personality_v0
오류가, 내가로드 할 때 - 내가
clang [list of object files] -shared -rdynamic -fPIC -o libmylib.so
- 로 연결 -fPIC 매개 변수를 사용하여 객체 파일을 각 파일을 컴파일합니다.
EDIT2 : 아, 나는 이것을 libstdc++
과 연결시켜줍니다. 이제 작동합니다. 감사.
모든 오브젝트 파일을 연결 줄에 인수로 붙이면됩니까? –
@MatsPetersson, 어떤 이유로 든 작동하지 않습니다. 오브젝트 파일로 컴파일하는 동안 추가 매개 변수를 사용해야합니까? – sinan
@sinan 해결되지 않은 기호입니까? 그렇다면 특정 순서로 링크해야합니다. http://stackoverflow.com/q/45135/23643 –