在linux上交叉编译c++到windows
Posted
技术标签:
【中文标题】在linux上交叉编译c++到windows【英文标题】:cross compile c++ on linux to windows 【发布时间】:2014-05-06 09:17:04 【问题描述】:clang++ main.cpp -std=c++11 -target x86_64-unknown-win32 -I/usr/lib/gcc/x86_64-w64-mingw32/4.6/include/
main.cpp:6:10: fatal error: 'string' file not found
#include <string>
^
1 error generated.
这很奇怪,因为:
/usr/lib/gcc/x86_64-w64-mingw32/4.6/include/ssp$ ls
ssp.h stdio.h string.h unistd.h
结果是一样的:
clang++ main.cpp -std=c++11 -target x86_64-unknown-win32 -I/usr/lib/gcc/x86_64-w64-mingw32/4.6/include/ssp
好吧。我曾经使用以下方法将c代码从linux编译到windows就好了:
x86_64-w64-mingw32-gcc main.c
我试过了:
x86_64-w64-mingw32-g++ -std=c++0x main.cpp
还有:
x86_64-w64-mingw32-g++ -std=c++0x main.cpp -I/usr/lib/gcc/x86_64-w64-mingw32/4.6/include
仍然会给出一堆错误,例如
main.cpp:70:23: sorry, unimplemented: non-static data member initializers
main.cpp:70:23: error: in-class initialization of static data member ‘origin’ of non-literal type
main.cpp: In constructor ‘Item::Item(std::string)’:
main.cpp:83:18: error: ‘stoul’ is not a member of ‘std’
main.cpp:88:4: error: ‘origin’ was not declared in this scope
main.cpp:89:17: error: ‘stof’ is not a member of ‘std’
main.cpp: In function ‘std::ostream& operator<<(std::ostream&, const Item&)’:
....
x86_64-w64-mingw32-g++ (GCC) 4.6.3
似乎是 ubuntu repo 上的最新版本。
我迷路了..为什么该死的铿锵声不会使用标题。为什么 x86_64-w64-mingw32-g++ 不听它应该使用 c++11 标准。
【问题讨论】:
string.h 和 string 一样吗?我认为不会。 Mingw 众所周知缺乏构建,并且从包管理器安装时通常已经过时了。您显示的错误可能是因为该版本实际上不支持它们。 乍一看,您使用的是 GCC 4.6.3。那肯定不支持你所追求的功能,你应该考虑将 MinGW 更新到 4.8 或 4.9 版本(我不知道是否支持 4.9) @CoffeeandCode 请不要传播 FUD。你不知道你在说什么。 @C19 Ubuntu 14.04 提供了MinGW-w64 GCC 4.8.2,它应该支持你所需要的。是时候更新您的系统了!请注意,如果您使用 this patch 自己构建 clang,您应该能够将 Clang 与您的 MinGW-w64 标头/库一起使用。它仍将使用 MinGW-w64 GCC 的 libstdc++,因此请确保您安装的库版本具有所需的功能。 【参考方案1】:您使用的 GCC 版本不支持non-static data member initializers
,如图here。找出 here 哪个版本的 GCC 支持您所需的 C++11 功能集。
【讨论】:
以上是关于在linux上交叉编译c++到windows的主要内容,如果未能解决你的问题,请参考以下文章
在 linux 上用 Eclipse 交叉编译,在 windows 上用 eclipse 交叉编译?
在ubuntu上交叉编译Boost 1.57.0 for arm