C++ Boost 示例:创建和管理线程(编译错误)
C++ Boost Example: Creating and Managing Threads (Compilation Error)
我目前使用的是 Boost 1.54.0。我正在关注 example.
中的代码
example_44_01.cpp
#include <boost/thread.hpp>
#include <boost/chrono.hpp>
#include <iostream>
void wait(int seconds)
{
boost::this_thread::sleep_for(boost::chrono::seconds{seconds});
}
void thread()
{
for (int i = 0; i < 5; ++i)
{
wait(1);
std::cout << i << std::endl;
}
}
int main(int argc, char** argv)
{
boost::thread t{thread};
t.join();
return 0;
}
所以,看起来我只需要 -lboost_thread 和 -lboost_chrono 库到 link 到编译时。我还添加了 -lboost_system.
这是我的执行脚本。
g++-7 -Wall -std=c++1z -g -c example_44_01.cpp -o example_44_01.o
g++-7 -Wall -std=c++1z -g example_44_01.o -o example_44_01 -lboost_system -lboost_thread -lboost_chrono &>result.txt
这是怎么回事?这是 result.txt 文件:
example_44_01.o: In function `boost::this_thread::sleep_for(boost::chrono::duration<long, boost::ratio<1l, 1000000000l> > const&)':
/usr/local/include/boost/thread/pthread/thread_data.hpp:243: undefined reference to `boost::this_thread::hidden::sleep_for(timespec const&)'
collect2: error: ld returned 1 exit status
我已经使用相同的库编译和 linked 其他程序,没有错误。那么是代码中的错误吗?这似乎值得怀疑,因为代码直接来自文档。感谢任何见解。
我曾经遇到过这个问题,因为我无意中使用了不同版本的 Boost(我首先从命令行安装了 Boost,然后几个月后,从 zip 手动安装)。
尝试将 Boost 库的路径添加到编译器。例如,如果您的库存储在 /usr/local/lib
,请尝试:
g++-7 -Wall -std=c++1z -g example_44_01.o -o example_44_01 -L/usr/local/lib -lboost_system -lboost_thread -lboost_chrono &>result.txt
我目前使用的是 Boost 1.54.0。我正在关注 example.
中的代码example_44_01.cpp
#include <boost/thread.hpp>
#include <boost/chrono.hpp>
#include <iostream>
void wait(int seconds)
{
boost::this_thread::sleep_for(boost::chrono::seconds{seconds});
}
void thread()
{
for (int i = 0; i < 5; ++i)
{
wait(1);
std::cout << i << std::endl;
}
}
int main(int argc, char** argv)
{
boost::thread t{thread};
t.join();
return 0;
}
所以,看起来我只需要 -lboost_thread 和 -lboost_chrono 库到 link 到编译时。我还添加了 -lboost_system.
这是我的执行脚本。
g++-7 -Wall -std=c++1z -g -c example_44_01.cpp -o example_44_01.o
g++-7 -Wall -std=c++1z -g example_44_01.o -o example_44_01 -lboost_system -lboost_thread -lboost_chrono &>result.txt
这是怎么回事?这是 result.txt 文件:
example_44_01.o: In function `boost::this_thread::sleep_for(boost::chrono::duration<long, boost::ratio<1l, 1000000000l> > const&)':
/usr/local/include/boost/thread/pthread/thread_data.hpp:243: undefined reference to `boost::this_thread::hidden::sleep_for(timespec const&)'
collect2: error: ld returned 1 exit status
我已经使用相同的库编译和 linked 其他程序,没有错误。那么是代码中的错误吗?这似乎值得怀疑,因为代码直接来自文档。感谢任何见解。
我曾经遇到过这个问题,因为我无意中使用了不同版本的 Boost(我首先从命令行安装了 Boost,然后几个月后,从 zip 手动安装)。
尝试将 Boost 库的路径添加到编译器。例如,如果您的库存储在 /usr/local/lib
,请尝试:
g++-7 -Wall -std=c++1z -g example_44_01.o -o example_44_01 -L/usr/local/lib -lboost_system -lboost_thread -lboost_chrono &>result.txt