mingw-w64无法链接到

时间:2016-01-09 09:35:02

标签: c++ c++11 boost ubuntu-14.04 mingw-w64

我已经安装了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

1 个答案:

答案 0 :(得分:-2)

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

为了交叉编译boost库,我建议你咨询一下:

特别:

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

其他一些Linux发行版包括mingw boost二进制文件,例如

如果有一些原因导致您无法在Windows上构建程序 unix-like环境(cygwin,MYSYS2)或交叉编译 提升证明太难了,那么你可以考虑在Fedora / ArchLinux VM中交叉编译你的程序。