mingw-w64无法链接到boost

mingw-w64 cannot link to boost

本文关键字:boost 链接 mingw-w64      更新时间:2023-10-16

我安装了g++-mingw-w64-i686来编译适用于linux上的windows的c++11应用程序:

sudo apt-get install g++-mingw-w64-i686
sudo apt-get install libc6-dev-i386

我想知道为什么它不能链接以提高

main7.cpp

#include <iostream>
int main()
{
    std::cout<<"Hello world!n";
    return 0;
}

编译:

$ i686-w64-mingw32-g++ main7.cpp -Wfatal-errors -o main -std=c++11 -I'/usr/include/c++/4.9' -L'/usr/lib' -L'/usr/i686-w64-mingw32/lib' -lboost_system -lboost_thread -lboost_serialization -pthread

结果:

/usr/bin/i686-w64-mingw32-ld: cannot find -lboost_system
/usr/bin/i686-w64-mingw32-ld: cannot find -lboost_thread
/usr/bin/i686-w64-mingw32-ld: cannot find -lboost_serialization
collect2: error: ld returned 1 exit status
make: *** [all] Error 1

gcc工作时:

g++ main7.cpp -Wfatal-errors -o main -std=c++11 -I'/usr/include/c++/4.9' -L'/usr/lib'  -lboost_system -lboost_thread -lboost_serialization -pthread

$ g++ --version

g++(Ubuntu 4.9.3-8ubuntu2~14.04)4.9.3

您需要从源代码交叉编译要链接到的Boost库。Ubtuntu不打包Windows版本的Boost库。Boost.org在Sourceforge上分发预先构建的Windows二进制文件,但它们仅为MSVC++构建,因此与mingw-w64不二进制兼容。

要交叉编译boost库,我建议您咨询:

  • Boost:开始

特别是:

  • 易于构建和安装

和:

  • 交叉编译

和:

  • Ubuntu:如何从源代码安装boost

我自己没有这样做,所以不能谈论你可能遇到的任何障碍。

其他一些linux发行版打包了mingw-boost二进制文件,例如

  • ArchLinux

  • Fedora

如果有某种原因导致您无法在Windows上一体构建程序类unix环境(cygwin、MYSYS2)或交叉编译boost太难了,那么您可以考虑在Fedora/ArchLinux虚拟机中交叉编译程序。