【问题标题】:Problem with compiling a mingw32 executable on linux system with boost.asio使用 boost.asio 在 linux 系统上编译 mingw32 可执行文件的问题
【发布时间】:2020-04-19 11:43:15
【问题描述】:

当我用代码编译一个 Boost.asio 程序时:

g++ -o main main.cpp -lboost_system -lboost_thread -pthread

它工作得很好,但是如果我在 linux 系统上将它编译为带有代码的可执行文件:

x86_64-w64-mingw32-g++ -I /usr/include/boost -o main.exe main.cpp -lboost_system -lboost_thread -pthread 

x86_64-w64-mingw32-g++ -o main.exe main.cpp -lboost_system -lboost_thread -pthread 

有一个编译错误

fatal error: boost/asio/io_service.hpp: No such file or directory
 #include <boost/asio/io_service.hpp>

我的意思是我尝试了很多方法来解决它,这让我很生气,你知道为什么吗?

【问题讨论】:

  • mingw 发行版是否也包含 Boost? g++ 是否可以找到标头,它需要适当配置和编译的 Boost。
  • 是否在/usr/include/boost 中安装了boost 并带有boost 子目录?通常你会在命令行中添加/usr/include(虽然这通常会由 GCC 自动添加)
  • 但我使用 mingw 为 windows 编译,在 g++ / gcc 上它工作正常
  • 要将 mingw 编译的对象链接到 Boost 库,mingw 需要一个已经为 mingw 配置和编译的 Boost。 Linux 库(甚至可能是头文件)将不起作用。它们将针对 Linux 而不是 Windows 系统进行配置,并由系统的常规 g++ 编译器编译。如果您为 mingw 配置了 Boost 库并使用 mingw、groovy 进行编译,但 mingw 编译器似乎找不到它。如果你正确指向 linux 版本,Mingw 应该仍然能够找到 header,即使它不能使用它。

标签: c++ linux boost boost-asio


【解决方案1】:

对于 Windows,您应该添加 winsockets 库作为编译参数。

g++ -o main.exe main.cpp -lboost_system -lboost_thread -pthread -lws2_32 -lwsock32

通常只有“ws2_32”就足够了。

注意: Winsock2 (ws2_32) 是 Winsock1 (wsock32) 的扩展。当前针对 wsock32 工作的程序在重新链接到 ws2_32 时应该仍然可以正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-09
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多