我正在尝试从Linux切换到Windows环境,但发现它非常困难。
这次我想测试一下我是否可以使用boost库。
我在Windows上编译boost有问题,所以我下载了预编译版本。我解压缩了所有内容并积极测试我可以编译只有头文件的库。
然后我复制了一些简单的boost :: asio示例。我在Eclipse中设置了所有内容。编译很顺利,但在链接期间,我得到了未定义的参考文献'问题来自' boost :: system'内部的东西。
C:/Users/jacek/cpp/boost_1_62_0/boost/system/error_code.hpp:221: undefined reference to `boost::system::generic_category()'
C:/Users/jacek/cpp/boost_1_62_0/boost/system/error_code.hpp:222: undefined reference to `boost::system::generic_category()'
C:/Users/jacek/cpp/boost_1_62_0/boost/system/error_code.hpp:223: undefined reference to `boost::system::system_category()'
所以我将“-lboost_system'”以及library目录的路径添加到我的链接选项中。但这没有用。
g++ "-LC:\\Users\\jacek\\cpp\\boost_1_62_0\\lib64-msvc-14.0" -o TestAsio.exe "src\\Main.o" -lboost_system
我查看了libraries目录,发现有一堆文件包含' boost_system'在名字里。他们是:
我不知道应该使用哪个。我尝试添加' libboost_system-vc140-mt-1_62'到链接选项,我尝试了所有其他文件,我尝试将文件重命名为linux模式' libboost_system.a',但没有任何效果。
g++ "-LC:\\Users\\jacek\\cpp\\boost_1_62_0\\lib64-msvc-14.0" -o TestAsio.exe "src\\Main.o" -llibboost_system-vc140-mt-1_62 -llibboost_system-vc140-mt-gd-1_62 -llibboost_system-vc140-mt-s-1_62 -llibboost_system-vc140-mt-sgd-1_62 -llibboost_system-vc140-s-1_62 -llibboost_system-vc140-sgd-1_62
我在这里做错了什么? 请帮忙... YotKay
答案 0 :(得分:0)
我在这篇文章的评论的帮助下自己解决了这个问题:boost asio example compilation error
看起来Boost的预编译版本是使用Visual Studion创建的,并且与G ++不兼容。如果我决定安装MinGW,那么我就不能使用boost的预编译版本,但必须使用g ++自己编译。
我做到了。 现在我用G ++编译了库。
我指定了增强系统库的路径: C:\ Users \用户亚切克\ CPP \ boost_1_62_0 \库\升压\ bin.v2 \库\ SYSTEM \构建\ GCC-的mingw-6.2.0 \调试\链路静电\
并添加此选项: -lboost_system-mgw62-d-1_62
现在boost :: system的问题消失了。然而,另一个弹出了提升asio,但幸运的是答案在这里:MinGW linker error: winsock
此示例现在在我的Windows 10笔记本电脑上运行正常。
#include <boost/asio/io_service.hpp>
#include <boost/asio/steady_timer.hpp>
#include <chrono>
#include <iostream>
using namespace boost::asio;
int main()
{
io_service ioservice;
steady_timer timer{ioservice, std::chrono::seconds{3}};
timer.async_wait([](const boost::system::error_code &ec)
{ std::cout << "3 sec\n"; });
ioservice.run();
}