0

我必须为线程构建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()'

我错过了什么吗?

4

1 回答 1

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

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

于 2011-07-08T21:51:21.210 回答