views:

9591

answers:

5

Not a question, I've just scoured the internet in search of a solution for this problem and thought I'd share it with the good folks of SO. I'll put it in plain terms so that it's accessible to newbs. :) (Apologies if this is the wrong place -- just trying to be helpful.)

This issue occurs with almost any user OS X Snow Leopard who tries to use the Eclipse C/C++ IDE, but is particularly annoying for the people (like me) who were using the Eclipse C/C++ IDE in Leopard, and were unable to work with Eclipse anymore when they upgraded. The issue occurs When users go to build/compile/link their software. They get the following error:

Launch Failed. Binary Not Found.

Further, the "binaries" branch in the project window on the left is simply nonexistent.

THE PROBLEM: is that GCC 4.2 (the GNU Compiler Collection) that comes with Snow Leopard compiles binaries in 64-bit by default. Unfortunately, the linker that Eclipse uses does not understand 64-bit binaries; it reads 32-bit binaries. There may be other issues here, but in short, they culminate in no binary being generated, at least not one that Eclipse can read, which translates into Eclipse not finding the binaries. Hence the error.

One solution is to add an -arch i686 flag when making the file, but manually making the file every time is annoying. Luckily for us, Snow Leopard also comes with GCC 4.0, which compiles in 32 bits by default. So one solution is merely to link this as the default compiler. This is the way I did it.

THE SOLUTION: The GCCs are in /usr/bin, which is normally a hidden folder, so you can't see it in the Finder unless you explicitly tell the system that you want to see hidden folders. Anyway, what you want to do is go to the /usr/bin folder and delete the path that links the GCC command with GCC 4.2 and add a path that links the GCC command with GCC 4.0. In other words, when you or Eclipse try to access GCC, we want the command to go to the compiler that builds in 32 bits by default, so that the linker can read the files; we do not want it to go to the compiler that compiles in 64 bits.

The best way to do this is to go to Applications/Utilities, and select the app called Terminal. A text prompt should come up. It should say something like "(Computer Name):~ (Username)$ " (with a space for you user input at the end). The way to accomplish the tasks above is to enter the following commands, entering each one in sequence VERBATIM, and pressing enter after each individual line.

cd /usr/bin
rm cc gcc c++ g++
ln -s gcc-4.0 cc
ln -s gcc-4.0 gcc
ln -s c++-4.0 c++
ln -s g++-4.0 g++

Like me, you will probably get an error that tells you you don't have permission to access these files. If so, try the following commands instead:

cd /usr/bin
sudo rm cc gcc c++ g++
sudo ln -s gcc-4.0 cc
sudo ln -s gcc-4.0 gcc
sudo ln -s c++-4.0 c++
sudo ln -s g++-4.0 g++

Sudo may prompt you for a password. If you've never used sudo before, try just pressing enter. If that doesn't work, try the password for your main admin account.

OTHER POSSIBLE SOLUTIONS You may be able to enter build variables into Eclipse. I tried this, but I don't know enough about it. If you want to feel it out, the flag you will probably need is -arch i686. In earnest, GCC-4.0 worked for me all this time, and I don't see any reason to switch now. There may be a way to alter the default for the compiler itself, but once again, I don't know enough about it.

Hope this has been helpful and informative. Good coding!

+1  A: 

Oh, one more thing Don't forget to make a record of your links before you change them! If you don't want to change the system wide settings, add a directory into PATH before /usr/bin (say, $HOME/bin), and make the symlinks there If you want to change back, here's the code I would use:

cd /usr/bin
sudo rm cc gcc c++ g++
sudo ln -s gcc-4.2 cc
sudo ln -s gcc-4.2 gcc
sudo ln -s c++-4.2 c++
sudo ln -s g++-4.2 g++

You'll want to check your /usr/bin and look for a file that's like "gcc-4.x". If it isn't 4.0 or 4.2, substitute the version numbers above for the version number that you have.

EDIT: Oh, I also have trouble running the 64-bit carbon Eclipse if I'm using GCC-4.0. However, the 32-bit Carbon works great.

Alex
+1  A: 

I got a program called gcc_select that has a prefs file somewhere and will allow you swap back and forth between multiple versions of gcc...

I think I got it from macports, but I'm not sure.

Brian Postow
+6  A: 

as mentioned, this can be accomplished simply by adding the necessary flag in eclipse.

to do so open the properties window, then go to "c/c++ build" > "settings". In the tree view on the right go to "miscellaneous" of "MacOS X C Linker" and "GCC C compiler" and append in the textbox labelled ~"flags" : "-arch i686"

none
A: 

Instead go to Project -> Properties; Select C/C++ Build -> Settings; Under Tool Settings change the C++ compiler and Linker commands from g++ to g++-4.0. If you are still getting any errors change the c compiler also to gcc-4.0. I changed the C compiler settings also to be on the safe side. Everything is working perfectly fine for me.