【问题标题】:Use gcc 4.2 in Xcode 4.2 and iOS SDK 5.0在 Xcode 4.2 和 iOS SDK 5.0 中使用 gcc 4.2
【发布时间】:2011-12-07 14:05:09
【问题描述】:

我今天早些时候刚刚升级到 Xcode 4.2 和 iOS SDK 5。但新编译器似乎一切都不同了。

现在有两个“Compiler for C/C++/Objective-C”选项,“Apple LLVM compiler 3.0”和“LLVM GCC 4.2”。缺少 GCC 4.2。

Apple 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 刚刚提供了一个对我来说很好的答案。
  • @dimas.priyanto 我想我前几天看到了你关于一些 GCC 安装程序的回答,现在在哪里?我没有注意到链接...
  • 其他人是否收到错误“写入时出错 -:管道损坏”。有人成功解决了这个问题吗?

标签: iphone ios xcode gcc compiler-construction


【解决方案1】:

在今年的 WWDC 中,Apple 表示 GCC 在 XCode 4.2 中不再可用。但是,他们表示 LLVM 编译器支持与 GCC 相同的命令行开关。

【讨论】:

  • 我的 Mac 有一个四核 i7 CPU,6GM RAM,LLVM 只能编译 8 个文件,然后才能用完我的 CPU 和内存。我想我会回滚到 iOS SDK 4.2,并等待游戏引擎提供商更新他们的引擎。
  • GCC 确实已被弃用,但在安装 Xcode 4.2 后它仍然可以在 /usr/bin/gcc-4.2 获得,但我找不到让 Xcode 使用它的方法。我的目标中的编译器设置允许选择“其他...”,但那里似乎没有任何效果。
【解决方案2】:

这是一种在 xcode 4.2 中启用 gcc 4.2 编译的方法。这大部分是通过命令行完成的,所以当你看到这样的行时:[ 15:30 jon@MacBookPro / ]$,你需要打开一个终端并在$之后运行命令。

在这个过程中没有removeddeleted文件或目录,所以如果你以后需要用LLVM编译,很容易撤消。

  1. 下载 - 但安装尚未 - xcode_4.1_for_lion.dmgxcode_4.1_for_snow_leopard.dmg

  2. 现在,按照以下步骤将 Xcode 4.1 安装到 /Developer-4.1

    1. 备份工作的/Developer 目录(Xcode 4.2 的安装位置)

    2. [ 15:30 jon@MacBookPro / ]$ sudo mv -v /Developer /Developer-4.2
      
  3. 使用默认安装位置 (/Developer) 运行 Xcode 4.1 安装程序

  4. 将新的 Xcode 4.1 安装移动到 /Developer-4.1

    [ 15:30 jon@MacBookPro / ]$ sudo mv -v /Developer /Developer-4.1
    
  5. 将 Xcode 4.2 开发者目录移回/Developer

    [ 15:30 jon@MacBookPro / ]$ sudo mv -v /Developer-4.2 /Developer
    
  • 编辑 Xcode 4.2 GCC 4.2.xcspec 文件以使 gcc 4.2 显示在编译器选项列表中[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"
    
    • 从这里更改第 4142 行:

      ShowInCompilerSelectionPopup = NO;
      IsNoLongerSupported = YES;
      
    • 到这里:

      ShowInCompilerSelectionPopup = YES; 
      IsNoLongerSupported = NO;
      
  • 备份 Xcode 4.2 iOS/Simulator Framework usr 目录:

    [ 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
    
  • 将 Xcode 4.1 iOS/Simulator Framework usr 目录复制到 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
    
  • gccinfo iOS SDK库目录从Xcode 4.1复制到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 编译!


  • This is a blog post I've written with a little more info about this process. Feel free to leave a comment on the blog if you run into any issues or have any questions.


    [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 了解多少
    • @ZhaoXiang 经过大约 3 天的反复试验,我发现了这一点。这非常令人沮丧,但我终于让它在模拟器和我的实际 iOS 5.0 设备上构建和运行!
    • 此解决方案是否支持 iOS 5 中的新功能,例如自动引用计数或 iCloud?
    • 只有 clang 支持 ARC。 iCloud 应该可以工作,因为这只是 API 支持的问题。
    【解决方案3】:

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

    您需要:Mac OSX Lion - 这很重要,不要尝试使用 Mountain Lion!

    您需要:Xcode 4.1 for Lion 的副本。使用您的开发帐户从 Apple 下载。暂时不要安装。

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

    完成此操作后,您的应用程序目录中将拥有 xcode 4.4.x。

    根据用户权限,您必须使用管理员密码确认许多操作。只是在必要时这样做。如果你损坏了你的系统,那你就得靠你自己了(但这不应该发生,因为 Xcode 已经被应用了)。

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

    /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

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

    导航到 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。您应该删除过时的“开发人员”目录。

    Xcode 现在也应该再次通过 Mac App Store 接受更新(这仍有待测试)。我也没有下载命令行工具,但我猜它也会继续存在。

    【讨论】:

    • 我在 xcode 4.5 以及设备上也取得了成功。但对于模拟器来说失败得很惨.. xcode 警告“类 uiimageview 不可用”、“UIBackgroundTaskInvalid”不可用等等
    猜你喜欢
    • 2012-02-13
    • 2012-01-07
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多