使用Clang从Linux到Windows的交叉编译
我正在尝试使用Clang将C语言应用程序从
Linux(64位)交叉编译为Windows(64位).我读了
page on cross-compilation,这不太有帮助.
作为一个简单的测试,我在test.c中有以下代码: #include <stdio.h> int main() { puts("hello world"); return 0; } 到目前为止,我最好的猜测是clang -o test -target x86_64-win64-?ABI? test.c.但是,我不知道ABI Windows 64位使用了什么.当我使用目标三重x86_64-win64-abcdefg运行clang时,它似乎编译正常 – 也就是说,它完成没有错误并导致某些有效的二进制文件.这没有任何意义,考虑到abcdefg绝对不是一个有效的ABI.由此产生的二进制文件对于这么小的程序来说太大了,Windows似乎认为它是一个16位程序(???).反汇编它显示了对“linux”和“gnu”的引用,所以看起来Clang甚至都没有尝试为Windows编译. 定位win32(x86_64-win32 – ??? ABI ???)会导致以下错误消息: test.c:1:10: fatal error: 'stdio.h' file not found #include <stdio.h> ^ 1 error generated. 如果我没弄错的话,这个错误是因为它不知道在哪里查找系统文件.我假设Clang确实在某处存储了Windows头文件,因为它声称能够交叉编译;但是哪里?如果没有,有什么地方我可以下载它们吗? 是否列出了所有架构,系统和ABI的Clang支持?交叉编译页面上的列表并不全面. 该页面还建议使用-mcpu = …,但警告表明它已过时.相反,正如警告所建议的那样,我尝试了-mtune = x86_64.这似乎没有效果.考虑到目标三元组中指定的体系结构,这是否是必要的? 我已经看到一些文献表明我需要lld,LLVM的实验连接器.是这样的吗?我有一些问题编译lld,并希望尽可能避免它. 解决方法
我已经在我的Windows 10机器上安装了mobaxterm.有一个免费版本.它提供了一个xserver.它包含cygwin的安装,您可以启动本地终端.你只需输入:apt-get install clang和clang就可以编译并找到stdio.h而不会抱怨.
但是如果你打算不在mobaxterm / cygwin上运行生成的可执行文件,而是在windows本身内运行,你需要用mingwin编译. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |