배경 :정적 라이브러리를 공유 라이브러리에 링크합니까?
나는 공유 LIB 몇 가지의 정적 libs와 연결합니다. 그 이유는 내 응용 프로그램이 그것을 테스트 한 특정 lib 버전을 사용하기를 원하기 때문입니다. 내 응용 프로그램과 정적 라이브러리를 공유 라이브러리로 제공하고 싶지 않습니다. 이 샘플 lib 및 응용 프로그램을 최대한 단순화하기 위해 만들었습니다. 연결하는 동안 공유 라이브러리를 응용 프로그램에 계속 링크하고 싶습니다.
질문 :
아래 나열된 오류 메시지가 나타나는 이유는 무엇입니까? 내가 도대체 뭘 잘못하고있는 겁니까? 아마도 이것은 리눅스에서 일하는 일반적인 방법이 아니지만 그렇게 할 수 있습니까? 이 특정 부양인가요?
---- 라이브러리
//example.cpp
#include <boost/thread.hpp>
void doit()
{
boost::thread t1;
}
#build script
g++ -Wall -fPIC -I/usr/include -c example.cpp -o example.o
g++ -shared /usr/lib/libboost_thread.a /usr/lib/libboost_system.a
example.o -o libexample.so
#build OK.
---- 샘플 응용 프로그램
//main.cpp
#include <iostream>
void doit();
int main()
{
std::cout << "main\n";
doit();
return 0;
};
#build script.
g++ -Wall -c main.cpp -o main.o
g++ libexample.so main.o -o main
#error message.
libexample.so: undefined reference to `boost::thread::thread()'
libexample.so: undefined reference to `boost::thread::~thread()'
collect2: ld returned 1 exit status
모든 소스 코드가 같은 디렉토리에 있습니다. Boost는/usr/lib 및/usr/include에 설치됩니다. Boost 버전 1.40은 우분투 10.04 시스템에서 apt-get을 사용하여 설치되었습니다.
감사합니다.
은 그렇게하지 마십시오. –
그러나 -fPIC을 사용하여 정적 라이브러리를 다시 컴파일하면 어떻게됩니까? 그게 도움이 되겠습니까? – mantler