2012-01-05 89 views
0

我试图使用此命令在Mac OS X Lion上编译LLVM 2.4。在Mac OS X Lion上构建32位模式Lion

./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 

这是怎么回事?

回答

2

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

如果你不熟悉你的机器元组都是什么,你可以使用

gcc -dumpmachine 

其中找到它,用狮子报道:

i686-apple-darwin11 

注意,在Lion上x86_64的 - 苹果darwin11适用于64位..但是,使用时,建设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狮子箱,所以建筑对于i386来说,叮当声似乎是不必要的 - 你可以编译64位版本(不管它默认选择什么),然后当你编译WITH时,你可以在你的CFLAGS或CXXFLAGS中指定'-m32'或'-m64'来生成正确的对象深度。

-n

+0

我想在i386 OSX Lion盒子上创建一些东西。 – 2012-10-11 08:44:05