在Mac OS X Lion上使用32位模式构建

时间:2012-01-05 05:37:11

标签: macos gcc osx-lion llvm

我尝试使用此命令在Mac OS X Lion上编译LLVM 2.4。

./configure --enable-pic --prefix=/usr/local CC="gcc -arch i386" CXX="g++ -arch i386"

我收到了这个错误。

Undefined symbols for architecture i386:
  "llvm::PATypeHolder::get() const", referenced from:
      llvm::ELFWriter::EmitGlobal(llvm::GlobalVariable*)    in libLLVMCodeGen.a(ELFWriter.o)
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status

这有什么问题?

1 个答案:

答案 0 :(得分:2)

对于交叉编译,配置在使用机器元组提供主机,目标和构建时喜欢它。

如果您不熟悉机器元组,可以使用

找到它
gcc -dumpmachine

其中,使用Lion报告:

i686-apple-darwin11

请注意,在Lion x86_64-apple-darwin11对64bit有效..但是,在构建llvm时使用它:

./configure \
     --enable-pic \
     --prefix=/usr/local \
     --host=i686-apple-darwin11 \
     --target=i686-apple-darwin11 \
     --build=i686-apple-darwin11

应该这样做,但你可能想要包括

--enable-languages=c,c++,obj-c
--enable-optimized 

您还可以使用“文件”和“otool”验证要链接的库。或者,如果它是您要链接的静态存档(看起来就是这种情况..),我的快速测试是

 ar p somelib.a $(ar t somelib.a | grep \.o | tail -1) | file -

你不会遇到i386 OSX Lion盒子,因此构建i386的clang似乎是不必要的 - 你可以构建64位版本(默认选择它),然后当你编译它时,你将在CFLAGS或CXXFLAGS中指定'-m32'或'-m64'以生成正确的对象位深度。

-n