链接程序以提升线程库时出错

时间:2011-07-08 20:20:52

标签: boost-thread boost-build

我必须为线程构建boost库。所以我给了命令

./bootstrap.sh 
在boost_1_46_1目录中

。然后

bjam --toolset=gcc --build-type=complete --with-thread link=static stage

当我尝试编译一个涉及线程的简单程序时,使用下面的命令,我得到错误。

g++ -I/home/sharatds/Downloads/boost_1_46_1 /home/sharatds/Downloads/boost_1_46_1/stage/lib/libboost_thread.a main.cpp -o ini
main.cpp:(.text+0x804): undefined reference to `boost::thread::join()'
main.cpp:(.text+0x9ec): undefined reference to `boost::thread::~thread()'

我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

我认为您的构建命令格式错误。您以不寻常的方式明确列出了归档库,我认为GCC忽略或误解了它。

尝试将构建分为两个步骤。将.cpp文件编译为.o,然后将另一个文件链接到.o与boost_thread存档库并发出可执行文件的步骤。

g++ -I/home/sharatds/Downloads/boost_1_46_1 main.cpp -o main.o
g++ main -o ini -L/home/sharatds/Downloads/boost_1_46_1/stage/lib/ -lboost_thread

上面的第一行将main.cpp编译为目标文件。第二行将您的目标文件与boost_thread库链接。 -L参数的行为与-I参数非常相似,但它为库提供了搜索路径,而不是包含文件。

另外,我怀疑你对-I的论证应该是

-I/home/sharatds/Downloads/boost_1_46_1/stage/include

这样您就可以包含构建结果中的标头,而不是源树本身。只是猜测那个。