使用linux上的mingw与clang交叉编译

时间:2015-03-11 18:57:20

标签: linux windows mingw clang cross-compiling

我试图在linux下为windows编译。我已经为linux和w64-mingw安装了binutils multilib。 如果我使用x86_64-w64-mingw-gcc编译一切正常,但如果我使用clang -target x86_64-w64-mingw或x86_64-windows-gnu编译器给我很多警告和windows.h的包含错误。

有什么问题? Clang不支持mingw binutils?

P.S。我也对freebsd的cross-compilig感兴趣,在哪里可以找到针对freebsd的binutils?

非常感谢您提前:))

2 个答案:

答案 0 :(得分:1)

-target是不够的,你还需要指定包含目录, 即:

clang -target i686-w64-mingw32 -nostdinc -fno-exceptions -isystem /opt/compiler/llvm-3.6/bin/../lib/clang/3.6.0/include -isystem /opt/compiler/mingw-w64/i686-w64-mingw32/include -isystem /opt/compiler/mingw-w64/i686-w64-mingw32/include/c++/4.9.2 -isystem /opt/compiler/mingw-w64/i686-w64-mingw32/include/c++/4.9.2/backward -isystem /opt/compiler/mingw-w64/i686-w64-mingw32/include/c++/4.9.2/i686-w64-mingw32

您可能会发现我的项目很有用:https://github.com/tpoechtrager/wclang - 该工具正在做所有令人讨厌的包括目录搜索。

答案 1 :(得分:0)

我的ELLCC项目包与库相关并包含可以定位多个目标的文件,包括各种Linux目标和使用MinGW-64包含的Windows和库。我有一个稍微修改过的clang版本,我称之为 ecc ,它支持配置文件以指定获取包含文件的位置,如何链接等.clang / mingw的典型配置文件看起来像{ {3}}。我已经修改了clang的-target选项以检查适用的配置文件并在存在时使用它。例如,要使用命令行来定位64位Windows,请使用命令行

ecc -target x86_64-w64-mingw32 hello.c

为例如编译相同的程序在ARM Linux系统中,您可以使用命令行,如

ecc -target arm-linux-engeabihf hello.c

支持的目标的完整列表是this。各种Linux主机和Windows的预编译二进制包为available here。这些软件包包括支持所有目标的binutils和GDB。