使用iOS 7 SDK和llvm-gcc-4.2

5
我已经安装了Xcode 5,发现GCC编译器已被弃用。假设我不想切换到Apple LLVM 5.0,以下是我的问题:
是否可以使用iOS7 SDK并仍然在llvm-gcc-4.2中编译?
如果可以,如何实现?
如果您不知道是否可能,请不要发布像“使用clang,人”这样的答案,因为它们实际上没有回答我发布的问题。

6
我可以请问一下,为什么您不想使用clang吗? - trojanfoe
1
我猜“我只是好奇”这个理由不够充分 :). 假设有一个庞大的项目,它不喜欢在clang中编译。将来会修复这个问题,但现在最好还是用“旧方法”编译它 :). - podkova
1
所以你愿意更新它以使用iOS 7,但不想修复它以使用clang?我认为你唯一的选择是回到Xcode 4。 - trojanfoe
1
苹果公司曾多次表达对GCC的不满,并表示计划自iOS 5时代开始使用clang以来就将其移除,因为它使他们的构建链变得痛苦。如果您想坚持“旧方法”,则必须坚持“旧SDK”。 - borrrden
1
苹果公司对GCC的真正问题在于GNU许可证。这就是为什么他们在clang和llvm上投入了如此巨大的精力。 - Léo Natan
显示剩余4条评论
4个回答

5

苹果在XCode 5中移除了对llvm-gcc-4.2的支持。即使您安装并将基础SDK更改为6.1 SDK,也无法使用llvm-gcc-4.2进行构建。因此,如果您想使用llvm-gcc-4.2,则唯一的选择是继续使用XCode 4.x。


1

1
“在使用iOS7 SDK的同时,仍可以使用llvm-gcc-4.2进行编译吗?”如果您想使用llvm-gcc-4.2编译整个应用程序:可能不行。我自己没有检查过,但是iOS 7头文件只需要增加对一个clang特性的依赖,该特性在llvm-gcc-4.2中缺失,您就会遇到编译错误。您可能能够绕过这些错误,但更容易(也更具有未来可靠性)的方法是升级到clang。

如果您只需要使用llvm-gcc-4.2编译部分应用程序:当然可以,只要在使用llvm-gcc-4.2构建的部分中不需要导入任何iOS 7头文件。

您可以尝试将有问题的代码移动到一个静态库中,使用gcc编译它,然后将其链接到使用clang构建的最终应用程序中。由于llvm-gcc-4.2无法生成armv8代码,因此您将无法针对64位进行目标设置,但除此之外,它应该可以正常工作。

一个注意事项:如果您的静态库使用C ++,则由于ABI和std库的差异可能会出现一些问题。但是至少这些是可以解决的问题。


0

您可以使用homebrew来安装所需的gcc版本。很可能您所有的Makefile都需要进行更正(叹气)

我已经这样做了:

brew search gcc

结果如下:

homebrew/versions/gcc43     
homebrew/versions/gcc45 
homebrew/versions/gcc47    
homebrew/versions/gcc49
homebrew/versions/gcc44
homebrew/versions/gcc45
homebrew/versions/gcc48    
homebrew/versions/llvm-gcc28
homebrew/dupes/apple-gcc42

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接