首页 文章

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

提问于
浏览
2

我试图在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?

附:我也对freebsd的cross-compilig感兴趣,在哪里可以找到针对freebsd的binutils?

非常感谢你提前:)

2 回答

  • 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 - 该工具正在执行所有令人讨厌的包含目录搜索 .

  • 0

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

    ecc -target x86_64-w64-mingw32 hello.c
    

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

    ecc -target arm-linux-engeabihf hello.c
    

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

相关问题