背景:
我想将一些静态库链接到一个共享库中。原因是我希望我的应用程序使用我已经测试过的特定库版本。我不想将静态版本作为共享库与我的应用程序一起发布。我创建了这个示例库和应用程序,以尽可能简化。在链接期间,我希望继续将共享库链接到应用程序。
问题:
为什么我会收到下面列出的错误消息?我做错了什么?也许这不是在Linux上通常的做法,但是是否有可能这样做?这是boost特定的吗?
---- 库
//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中。在ubuntu 10.04机器上使用apt-get安装了版本号为1.40的Boost。
谢谢!