在Xcode 4.2和iOS SDK 5.0中使用gcc 4.2

4

我刚刚升级到了Xcode 4.2和iOS SDK 5。但是新编译器与以前的不同。

现在有两个“C/C++/Objective-C编译器”选项,“Apple LLVM编译器3.0”和“LLVM GCC 4.2”。GCC 4.2已经消失了。

苹果的LLVM编译器3.0编译速度非常快(我喜欢这个),但会出现999+个警告,并且我的游戏无法运行。看起来存在一些内存方面的差异,当加载我们游戏的脚本时会导致崩溃。

LLVM GCC 4.2非常慢,甚至在我的i7机器上几小时也无法完成一个构建。

还有一件事是,我们的引擎使用gcc命令行进行构建(而不是xcode)。

因此,这引出了一个问题,如何在Xcode 4.2中使用gcc 4.2?这是否可能呢?


我遇到了同样的问题,在 XCode 4.2 Build 4D199 上,/usr/bin/gcc-4.2 不可用,你成功安装了吗? - dimas.priyanto
很抱歉,目前还没有。不过chown刚刚提供了一个看起来很好的答案。 - Zhao Xiang
@dimas.priyanto,我记得几天前看到你关于GCC安装程序的回答,现在它在哪里?我没有记录链接... - Zhao Xiang
有其他人收到了“Error writing to -: Broken pipe”错误吗?是否有人成功解决了这个问题? - silviupop
3个回答

4
以下是启用在xcode 4.2中使用gcc 4.2编译的方法。大部分操作都需要通过命令行完成,因此当您看到像这样的行:[ 15:30 jon@MacBookPro / ]$,您需要打开一个终端并在$后运行该命令。

在此过程中不会删除任何文件或目录,因此如果您将来需要使用LLVM进行编译,则可以轻松撤消这些更改。

  1. Download - but do not install yet - xcode_4.1_for_lion.dmg or xcode_4.1_for_snow_leopard.dmg

  2. Now, follow these steps to install Xcode 4.1 into /Developer-4.1:

    1. Backup the working /Developer directory (where Xcode 4.2 is installed)

    2. [ 15:30 jon@MacBookPro / ]$ sudo mv -v /Developer /Developer-4.2
      
  3. Run the Xcode 4.1 installer using the default install location (/Developer)

  4. Move the new Xcode 4.1 installation to /Developer-4.1:

    [ 15:30 jon@MacBookPro / ]$ sudo mv -v /Developer /Developer-4.1
    
  5. Move the Xcode 4.2 developer directory back to /Developer:

    [ 15:30 jon@MacBookPro / ]$ sudo mv -v /Developer-4.2 /Developer
    
  • Edit the Xcode 4.2 GCC 4.2.xcspec file to get gcc 4.2 to show in the list of compiler options [1]:

    [ 15:30 jon@MacBookPro / ]$ sudo vi "/Developer/Library/Xcode/PrivatePlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/GCC 4.2 (Plausible Blocks).xcplugin/Contents/Resources/GCC 4.2.xcspec"
    
    • Change lines 41 and 42 from this:

      ShowInCompilerSelectionPopup = NO;
      IsNoLongerSupported = YES;
      
    • To This:

      ShowInCompilerSelectionPopup = YES; 
      IsNoLongerSupported = NO;
      
  • Backup the Xcode 4.2 iOS/Simulator Framework usr directories:

    [ 15:30 jon@MacBookPro / ]$ sudo mv -v /Developer/Platforms/iPhoneOS.platform/Developer/usr /Developer/Platforms/iPhoneOS.platform/Developer/usr.backup
    [ 15:30 jon@MacBookPro / ]$ sudo mv -v /Developer/Platforms/iPhoneSimulator.platform/Developer/usr /Developer/Platforms/iPhoneSimulator.platform/Developer/usr.backup
    
  • Copy Xcode 4.1 iOS/Simulator Framework usr directories to Xcode 4.2:

    [ 15:30 jon@MacBookPro / ]$ sudo cp -rv /Developer-4.1/Platforms/iPhoneOS.platform/Developer/usr /Developer/Platforms/iPhoneOS.platform/Developer/usr
    [ 15:30 jon@MacBookPro / ]$ sudo cp -rv /Developer-4.1/usr /Developer/Platforms/iPhoneSimulator.platform/Developer/usr
    
  • Copy the gcc and info iOS SDK library directories from Xcode 4.1 to Xcode 4.2 [2]:

    [ 15:30 jon@MacBookPro / ]$ sudo cp -rv /Developer-4.1/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/usr/lib/gcc /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/usr/lib/gcc
    [ 15:30 jon@MacBookPro / ]$ sudo cp -rv /Developer-4.1/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/usr/lib/info /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/usr/lib/info
    
  • 使用gcc-4.2进行编译!

    CGG 4.2在xcode 4.2中的截图


  • 这是我写的一篇博客文章,其中包含更多关于此过程的信息。如果您遇到任何问题或有任何疑问,请在博客上留言。


    [1] 如果从命令行(如使用viemacsnano等)打开,请确保要么用引号括起路径"/long path/with spaces/in it/file.xcspec",要么转义空格/some/long\ path/with\ spaces/in\ it/file.xcspec

    [2] 这是必要的,因为iPhoneOS.platform SDK有自己单独的/usr/lib目录,而iPhoneSimulator.platform SDK没有。


    你是自己发现的吗?我几乎无法想象你对Xcode IDE了解多少。 - Zhao Xiang
    @ZhaoXiang 我试了三天,通过不断尝试终于解决了这个问题。虽然很令人沮丧,但我最终成功地在模拟器和我的iOS 5.0设备上构建并运行了它! - chown
    只有clang支持ARC。iCloud应该可以工作,因为这只是API支持的问题。 - Jon Shier
    我还没有尝试过,但我会尽快去做,不过我很喜欢这个答案,所以我决定现在就接受它。谢谢。 - Zhao Xiang
    @Eugene - 我已经进行了大量测试(使用干净的4.2和4.1安装),它确实有效。听起来好像有其他问题,因为即使您搞砸了上面的命令,在构建/编译期间也只会出现错误。这个过程没有任何可能阻止Xcode运行的东西。当您尝试运行xcode时,是否收到任何错误弹出对话框? - chown
    显示剩余5条评论

    3

    在今年的WWDC中,苹果公司表示XCode 4.2中不再支持GCC编译器。但是他们表示LLVM编译器支持与GCC相同的命令行选项。


    我的Mac配备了一颗四核i7处理器和6GB内存,LLVM只能编译8个文件,否则就会耗尽我的CPU和内存。我想我会回滚到iOS SDK 4.2,并等待游戏引擎提供商更新他们的引擎。 - Zhao Xiang
    GCC确实已经被弃用,但在安装Xcode 4.2后仍可在/usr/bin/gcc-4.2找到,但我找不到让Xcode使用它的方法。我的目标中编译器设置允许选择“其他...”,但似乎没有任何有效的方法。 - ettore

    1

    我试图为Xcode的应用版本更新此内容。这将展示如何安装具有完整gcc支持的Xcode 4.4.x。

    你需要:Mac OSX Lion - 这很重要,请勿尝试使用Mountain Lion!

    你需要:Lion的Xcode 4.1副本。从Apple下载并使用dev帐户。不要立即安装。

    现在通过Mac App Store从Apple安装Xcode 4.4.x。

    完成后,你将在应用程序目录中拥有xcode 4.4.x。

    根据用户权限,你将不得不使用管理员密码确认许多操作。只有在必要时才执行。如果你损坏了系统,你就自己负责(尽管不应该发生,因为Xcode已经被应用化了)。

    通过右键单击“显示包内容”,然后导航到此处的gcc 4.2插件打开Xcode 4.4.x:

    /Applications/Xcode.app/Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/GCC 4.2.xcplugin/Contents/Resources/

    使用文本编辑器打开文件gcc 4.2.xcspec。

    请查看第41行和第42行。确保它们的显示与此处完全相同(在新安装中,这些值将被颠倒)。

    ShowInCompilerSelectionPopup = YES;
    IsNoLongerSupported = NO;
    

    保存并关闭。

    为Lion安装Xcode 4.1。

    现在导航到您启动驱动器根目录的开发人员目录。

    导航到/ Developer / Platforms / iPhoneOS.platform / Developer / usr /

    使用command-c复制usr目录

    切换回xcode 4.4.x

    导航到:/ Applications / Xcode.app / Contents / Developer / Platforms / iPhoneOS.platform / Developer /

    使用command-v粘贴usr目录

    现在,Lion将尝试合并这两个目录。确保按“保留更新的文件”

    重复源:/ Developer / Platforms / iPhoneSimulator.platform / Developer / usr和目标:/Applications/Xcode.app/Contents/Developer/Platforms/usr

    再次合并并“保留更新的文件”

    导航到:/ Developer / Platforms / iPhoneOS.platform / Developer / SDKs / iPhoneOS4.3.sdk / usr / lib

    现在通过选择它并使用command-c复制gcc目录

    导航到Xcode 4.4.x应用程序:

    /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/usr/lib

    使用命令-v将gcc目录粘贴

    从/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/usr/lib开始,重复操作直到'info'目录 目标再次是/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/usr/lib

    完成。启动Xcode并在必要的设置中选择GCC 4.2。您应该删除过时的“Developer”目录。

    Xcode现在也应该能够通过Mac App Store接受更新(这还需要测试)。我也没有下载命令行工具,但我猜它也会生效。


    我在使用Xcode 4.5时,对于设备也取得了成功。但是对于模拟器来说则失败了。Xcode会警告“类uiimageview不可用”,“UIBackgroundTaskInvalid不可用”等等。 - eugene

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