【问题标题】:Compiling Boost example projects with Cygwin + gcc使用 Cygwin + gcc 编译 Boost 示例项目
【发布时间】:2014-08-04 09:09:28
【问题描述】:

在尝试编译 boost asio 示例项目时 async_tcp_echo_server.cpp

我收到如下错误:

__MSABI_LONG was not declared in this file scope
BOOST_ASIO_NATIVE_ERROR(ERROR_BROKEN_PIPE)

__MSABI_LONG was not declared in this file scope
BOOST_ASIO_NATIVE_ERROR(ERROR_OPERATION ABORTED)

这是 Boost 1.55.0 和 gcc 版本 4.8.3

boost 是用 gcc 和以下命令编译的

./bootstrap.sh
./b2 cxxflags="-D__USE_W32_SOCKETS -D_WIN32_WINNT=0x0501
./b2 install

我尝试用

编译示例项目
gcc -std=C++11 -D__USE_W32_SOCKETS -D_WIN32_WINNT=0x0501 -I C:\boost_1_55_0 C:\boost_1_55_0\boost\asio.hpp async_tcp_echo_server.cpp

【问题讨论】:

  • 您在最后一个命令中使用的是哪个gcc?通常你不会在 Cygwin 的编译器中使用 Windows 风格的路径名。
  • 我不确定您所说的“哪个 gcc”g++ 将在这里调用,因为 boost 是一个 C++ 库。我在 windows 命令提示符下运行 gcc,并相应地设置了 $path 环境变量。我也尝试过使用 cygwin 命令提示符,它会产生相同的错误。
  • GCC 有一个本地 Windows 端口,称为 MinGW。由于您使用本机路径名,我想知道您是否不小心使用了错误的gcc

标签: c++ gcc boost cygwin


【解决方案1】:

我知道这是一种旧线程。 我设法通过 Cygwin setup_x86.exe 重新安装 boost lib 来修复它。 我安装的版本是1.57。而且您不必将 -D 选项放在命令行中。 希望这可能会有所帮助。

【讨论】:

    【解决方案2】:

    cygwin 安装程序的 1_57 版本对我没有帮助,它给了我fd_set errors

    这是我试图让 boost 示例代码工作的原因:

    1. 在顶部添加#define __MSABI_LONG(x) x。 - 很冷,我知道 :)
    2. 将这些标志添加到g++:-D_WIN32_WINNT=0x0501 -D__USE_W32_SOCKETS -std=c++11 -lboost_system -lws2_32

    瞧!

    【讨论】:

    • 这是 1_58 提升 btw。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 2018-12-13
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-09
    相关资源
    最近更新 更多