我正在尝试构建我的第一个静态库,但我遇到了编译问题。我的意思是我可以编译我的库,一切看起来都很好,但是当我设置一个测试项目来测试它时,我遇到了这种错误:
LD:警告:忽略文件 /Users/*/Desktop/TestApp/LibProva/libProva.a,文件是为 不是正在链接的体系结构的存档 (i386( 架构 i386 的未定义符号: "_OBJC_CLASS_$_Prova",引用自: objc-class-ref in AppDelegate.o LD:找不到架构 i386 的符号 clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用(
LD:警告:忽略文件 /Users/**/Desktop/TestApp/LibProva/libProva.a,文件是为 不是正在链接的体系结构的存档 (i386(
所以我想这是编译的问题(由于模拟器和设备中的架构不同(,但我找不到如何以正确的方式做到这一点。有人可以解释我如何解决这个问题吗?
您必须使用 lipo 来创建通用二进制文件:
#!/bin/bash
#build the device
echo building for ARM architecture
xcodebuild -sdk iphoneos4.3 "ARCHS=armv6 armv7" build > /dev/null
#build the simulator
echo building for the i386 architecture
xcodebuild -sdk iphonesimulator4.3 "ARCHS=i386 x86_64" "VALID_ARCHS=i386 x86_64" build > /dev/null
#make the folder
mkdir "Fat Binary"
#lipo suck it together
echo lipo binaries together
lipo -output Fat Binary/libmylib.a -create build/Release-iphoneos/libprefuse_visual_iOS.a build/Release-iphonesimulator/libmylib.a
echo lipo binary saved at $./Fat Binary/libmylib.a
echo copying headers
cp -R build/Release-iphoneos/usr "Fat Binary"
echo [COMPLETE]
请务必将 libmylib.a
实例替换为 xcodebuild
生成的.a
的实际名称。