我必须为线程构建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()'
我错过了什么吗?
答案 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
这样您就可以包含构建结果中的标头,而不是源树本身。只是猜测那个。