在Windows上编译boost :: asio示例

时间:2016-12-23 19:44:49

标签: c++ windows boost

我正在尝试从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.lib
  • libboost_system-vc140-MT-GD-1_62.lib
  • libboost_system-vc140-MT-S-1_62.lib
  • libboost_system-vc140-mt-sgd-1_62.lib
  • libboost_system-vc140-s-1_62.lib
  • libboost_system-vc140-SGD-1_62.lib

我不知道应该使用哪个。我尝试添加' 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

1 个答案:

答案 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();
}