背景:将静态库链接到共享库?
我想将几个静态库链接到一个共享库。原因是我希望我的应用程序使用我测试过的特定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中。在Ubuntu 10.04机器上使用apt-get安装Boost版本1.40。
谢谢!
不要这样做:静态库通常包含普通对象成员,而共享库包含与位置无关的代码。 –
但是,如果我用-fPIC重新编译静态库,该怎么办?这会有帮助吗? – mantler