2016-12-23 131 views
-2

我试图从Linux切换到Windows环境,但发现它非常困难。在Windows上编译boost :: asio示例

这次我想测试是否可以使用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'以及库目录的路径。但是这没有帮助。

g++ "-LC:\\Users\\jacek\\cpp\\boost_1_62_0\\lib64-msvc-14.0" -o TestAsio.exe "src\\Main.o" -lboost_system 

我检查了图书馆目录,发现有一串包含名为“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 

我在这里做错了什么? boost asio example compilation error

它看起来像升压的预编译的版本是用Visual Studion创建和不兼容G ++: 请帮助... YotKay

+1

“-LC:\\看起来很奇怪,-L”C:\\? – willll

+0

我想我在这里找到了一个解决方案:http://boost.org/more/getting_started/windows.html – YotKay

+2

问题是预编译的二进制文件是用Visual Studio编译的,它们与G ++不兼容。拉屎! – YotKay

回答

0

我从这篇文章评论的帮助下解决了它自己。如果我决定安装MinGW,那么我不能使用boost的预编译版本,但必须使用g ++自己编译它。

我做到了。 现在我有用G ++编译的库。

我指定了这样的升压系统库的路径: c:\ Users \ jacek \ cpp \ boost_1_62_0 \ libraries \ boost \ bin.v2 \ libs \ system \ build \ gcc-mingw-6.2.0 \调试\链接静态\

,并添加此选项: -lboost_system-mgw62-d-1_62

现在与提升问题::系统中消失。然而,另一个弹出提升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(); 
} 
相关问题