Matt Sephton
Matt Sephton

Reputation: 4132

Building from the command line to produce a binary for Mac OS 10.5 (and 10.6)

I am referring to the following source: http://clpbar.sourceforge.net

Build process is the standard: ./configure followed by make

If I build on 10.5 I get a binary whose file contains: Mach-O executable i386
If I build on 10.6 I get a binary whose file contains: Mach-O 64-bit executable x86_64

How can I build from the command line on 10.6 and produce an executable of the type Mach-O executable i386, or even better a Universal binary containing executables of both types.

Please test any suggested solutions.

Thanks,
matt

Upvotes: 3

Views: 2332

Answers (3)

Matt Sephton
Matt Sephton

Reputation: 4132

From the Apple dev forums:

./configure CC="gcc -arch i386" CXX="g++ -arch i386"

Which works perfectly.

Upvotes: 3

Grant Limberg
Grant Limberg

Reputation: 21383

By default, the version of GCC distributed with OS X 10.6 builds 64-bit binaries. The version of GCC distributed with 10.5 builds 32-bit binaries by default.

Before running ./configure, set a few environment variables. If you want it to be an Intel universal binary with i386 and x86_64 code, set the following variables (assuming you're using bash):

export CFLAGS="-arch i386 -arch x86_64"
export CXXFLAGS=$CFLAGS
export LDFLAGS=$CFLAGS

This will tell the configure script to pass these compiler and linker options, and thus build a binary with both the i386 and x86_64 architectures.

Or, if you want it to only build as an i386 binary:

export CFLAGS="-arch i386"
export CXXFLAGS=$CFLAGS
export LDFLAGS=$CFLAGS

Upvotes: 3

i_am_jorf
i_am_jorf

Reputation: 54620

Use a -arch flag for each target. So, e.g.

gcc -arch i386 -arch x86_64 ...

would build a fat binary with both. I believe by default gcc builds to the target architecture, which is x86_64 with OSX 10.6.

Upvotes: 1

Related Questions