Clang C ++ Cross Compiler-从Mac OS X生成Windows可执行文件

gavlaaaaaaaaaa

我使用Clang编译器在Mac上使用Xcode创建了C ++应用程序。

我想编译我的源文件以创建可以在Windows计算机上运行的可执行文件,但是我无法让Clang生成可执行文件。

这是我尝试过的:

clang++ -std=c++11 -stdlib=libc++ -arch x86_64 class1.cpp class2.cpp... -o executable.exe

这将创建一个可执行文件,但是它无法运行(Windows给我一个错误,原因是该应用程序为16位-不能理解这一点-无法在64位上运行)

clang++ -std=c++11 -stdlib=libc++ -target i386-pc-win32 class1.cpp class2.cpp 

由于某种原因,每当我使用该-target标志时,我都会收到一条错误消息,指出编译器无法找到<iostream>标头,但是在其他任何时候它都不会抱怨。
我尝试使用,-Ipath/to/iostreamfolder/但这不会产生任何更好的结果

任何建议都很好!谢谢!

我也尝试过该'-triple x86-pc-win32'标志,但是收到此警告clang: warning: argument unused during compilation: '-triple x86-pc-win32'

bames53

原则上,Clang可以用作交叉编译器:与大多数编译器不同,Clang / LLVM在同一二进制文件中包含用于不同平台的组件(例如,代码生成器,汇编器和链接器)。

但是,在生产能力中尝试使用它时会遇到许多问题:

  • 您需要平台库和标头。要生成将在Windows上运行的可执行文件,您需要要链接的Windows标头和Windows库,如果要动态链接,请导入lib,如果要静态链接,则需要静态lib。您应该能够从Visual Studio的安装中获得这些。

  • Windows上还没有完成许多C ++功能,例如名称处理和RTTI支持。在带有Clang的Windows上为Windows编译时,您将遇到这些相同的问题。 如今,Windows C ++支持已基本完成

  • LLVM项目包括lld链接器,它显然已经足够远,可以在x86 Windows上自行托管,因此可能适合您作为跨平台链接器使用,但是lld尚不是clang发行版的标准部分。ld与Windows(link.exe上的Clang一样,OS X上的Clang默认仍使用OS X平台链接器您需要获取lld并弄清楚如何与它链接,或者找到其他跨平台链接器。

  • clang驱动程序未编写为跨平台编译器驱动程序。您可能需要做更多的动手工作才能运行跨平台编译。看一下:的输出,clang -###clang驱动程序为您构造了该命令,但是您可能需要手工完成许多与clang驱动程序相同的工作。而且由于clang在跨平台编译时得到的测试少得多,因此您可能会遇到更多错误。

  • Xcode不会为您提供任何帮助。它可以将clang配置为针对OS X或iOS构建,但是您必须手动将跨平台构建配置为Windows。

我相对有信心可以将基于LLVM的环境拼凑在一起,以在OS X或Linux上构建C“ Hello,World” Windows exe,但是Xcode尚未准备好在可能的列表中添加“ Windows”项目标平台。


如果您不是编译器开发人员,则最好将源代码复制到Windows计算机并使用Visual Studio构建。如果您是或希望成为一名编译器开发人员,则一定可以帮助推动Clang的交叉编译能力向前发展。我认为Clang通用驱动程序项目令人兴奋,并且我真的很想看到进展继续。


我已经成功地完成了相反的交叉编译:在Windows上编译Mac OS X可执行文件。事实证明,在小型程序上手动进行操作非常容易,即直接编译.cpp文件。

首先,Mac OS X开发工具带有“ SDK”,其中包含特定操作系统的所有系统库和头文件。这里最大的挑战是弄清楚如何将SDK传输到Windows,同时保留SDK中的所有符号链接。(由于某种原因,在Windows上创建符号链接需要提升的特权,因此在OS X上使用符号链接生成tar.gz之后,我必须以管理员身份在Windows上运行7zip才能正确扩展档案。)

一旦Windows上提供了SDK,就可以通过一个标志告诉clang从哪里获取所有系统依赖项:-isysroot我将其与-target标志结合在一起,以告诉clang如何为OS X生成完整的目标文件。

对于链接,我手动使用了lld,因为编译器驱动程序似乎不支持使用与lld的交叉链接。lld支持类似的标志来确定目标系统库。

最后一步只是将生成的可执行文件复制到OS X机器上,启用执行权限(Windows不支持相同的文件权限,因此在构建时不会设置执行位)并运行结果。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Mac OS X和Windows中的可执行文件

来自分类Dev

Mac os 终端:终端窗口中的可点击文本(c 可执行文件)

来自分类Dev

install_name_tool以更新可执行文件以在Mac OS X中搜索dylib

来自分类Dev

如何强制Eclipse使用SceneBuilder可执行文件?Mac OS X

来自分类Dev

如何在Mac OS X上创建ELF可执行文件?

来自分类Dev

将Unix可执行文件添加到Mac OS X Dock

来自分类Dev

如何在Mac OS X的可执行文件中嵌入二进制文件的内容?

来自分类Dev

如何在Mac OS X 10.8.5上恢复/ usr / libexec / java_home可执行文件?

来自分类Dev

QProcess Mac OS,无法启动带有参数的可执行文件

来自分类Dev

为什么我可以在Mac OS X中查看某些Unix可执行文件,而不能查看其他文件?

来自分类Dev

我可以在Mac上生成可在Windows上使用的python可执行文件吗?

来自分类Dev

我可以在Mac上生成可在Windows上使用的python可执行文件吗?

来自分类Dev

从z / OS上的C语言可执行文件中删除符号信息

来自分类Dev

C#从项目生成动态可执行文件

来自分类Dev

如何构建独立的clang可执行文件?

来自分类Dev

C ++可执行文件崩溃

来自分类Dev

将可执行文件从Linux传输到Mac

来自分类Dev

无法在Mac上的Wine中运行Windows可执行文件

来自分类Dev

C ++中的Lambda表达式,OS X的clang与GCC

来自分类Dev

防止损坏的可执行文件在OS X上启动

来自分类Dev

针对OS X的已编译Golang可执行文件扩展

来自分类Dev

“ bash可执行文件”和“ bash -c可执行文件”之间的区别

来自分类Dev

如何在Mac OS X上使CMake使用GCC而不是Clang?

来自分类Dev

clang无法链接到Mac OS X上的Qt 5.1.1框架

来自分类Dev

如何在运行OS / X El Capitan的Mac上将clang升级到LLVM 3.8?

来自分类Dev

如何在运行OS / X El Capitan的Mac上将clang升级到LLVM 3.8?

来自分类Dev

如果clang是编译器的前端,那么为什么它可以生成可执行文件?

来自分类Dev

CMake错误:在Mac OS上使用clang找不到OpenMP_C(缺少:OpenMP_C_FLAGS)

来自分类Dev

是否可以分发使用 C 生成的可执行文件的 Java 桌面应用程序?

Related 相关文章

  1. 1

    Mac OS X和Windows中的可执行文件

  2. 2

    Mac os 终端:终端窗口中的可点击文本(c 可执行文件)

  3. 3

    install_name_tool以更新可执行文件以在Mac OS X中搜索dylib

  4. 4

    如何强制Eclipse使用SceneBuilder可执行文件?Mac OS X

  5. 5

    如何在Mac OS X上创建ELF可执行文件?

  6. 6

    将Unix可执行文件添加到Mac OS X Dock

  7. 7

    如何在Mac OS X的可执行文件中嵌入二进制文件的内容?

  8. 8

    如何在Mac OS X 10.8.5上恢复/ usr / libexec / java_home可执行文件?

  9. 9

    QProcess Mac OS,无法启动带有参数的可执行文件

  10. 10

    为什么我可以在Mac OS X中查看某些Unix可执行文件,而不能查看其他文件?

  11. 11

    我可以在Mac上生成可在Windows上使用的python可执行文件吗?

  12. 12

    我可以在Mac上生成可在Windows上使用的python可执行文件吗?

  13. 13

    从z / OS上的C语言可执行文件中删除符号信息

  14. 14

    C#从项目生成动态可执行文件

  15. 15

    如何构建独立的clang可执行文件?

  16. 16

    C ++可执行文件崩溃

  17. 17

    将可执行文件从Linux传输到Mac

  18. 18

    无法在Mac上的Wine中运行Windows可执行文件

  19. 19

    C ++中的Lambda表达式,OS X的clang与GCC

  20. 20

    防止损坏的可执行文件在OS X上启动

  21. 21

    针对OS X的已编译Golang可执行文件扩展

  22. 22

    “ bash可执行文件”和“ bash -c可执行文件”之间的区别

  23. 23

    如何在Mac OS X上使CMake使用GCC而不是Clang?

  24. 24

    clang无法链接到Mac OS X上的Qt 5.1.1框架

  25. 25

    如何在运行OS / X El Capitan的Mac上将clang升级到LLVM 3.8?

  26. 26

    如何在运行OS / X El Capitan的Mac上将clang升级到LLVM 3.8?

  27. 27

    如果clang是编译器的前端,那么为什么它可以生成可执行文件?

  28. 28

    CMake错误:在Mac OS上使用clang找不到OpenMP_C(缺少:OpenMP_C_FLAGS)

  29. 29

    是否可以分发使用 C 生成的可执行文件的 Java 桌面应用程序?

热门标签

归档