我尝试使用此命令在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
这有什么问题?
答案 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