我试图在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?
非常感谢您提前:))
答案 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。