Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
411 views
in Technique[技术] by (71.8m points)

iphone - Use gcc 4.2 in Xcode 4.2 and iOS SDK 5.0

I just upgraded to Xcode 4.2 and iOS SDK 5 earlier today. But everything seems different with new compilers.

There are two "Compiler for C/C++/Objective-C" options now, "Apple LLVM compiler 3.0" and "LLVM GCC 4.2". GCC 4.2 is missing.

Apple LLVM compiler 3.0, builds really fast(I like that), gives me 999+ warnings, and my game can no longer run. It looks like there's some differences on memory, and it crashes when loading our game's scripts.

LLVM GCC 4.2 is so god damn slow, I still cannot finish one build after hours on my i7 machine.

And, one more thing is our engine uses gcc command lines to build(instead of xcode).

So, it leads to one question, how can I use gcc 4.2 in Xcode 4.2? Is that even possible?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Here is a way to enable compiling with gcc 4.2 in xcode 4.2. Most of this is done via command line so when you see lines like this: [ 15:30 jon@MacBookPro / ]$, you need to open up a Terminal and run the command after the $.

No files or directories are removed or deleted in this process, so it is easy to undo if you need to compile with LLVM in the future.

  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

Compile using gcc-4.2!

Screenshot of CGG 4.2 in xcode 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] If opening from a command line (using something like vi, emacs, nano, etc) make sure to either enclose the path in quotes "/long path/with spaces/in it/file.xcspec" or escape the spaces /some/long path/with spaces/in it/file.xcspec

[2] This is necessary because the iPhoneOS.platform SDK has its own seperate /usr/lib directories but the iPhoneSimulator.platform SDK does not


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...