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