如何更新我们的支持arm64 Build的静态库架构?
几天前我创build了静态库(通用) ,与Xcode5.0 SDK7
工作正常。 使用SDK7.1
更新Xcode5.1
后,如果我select模拟器iPhone Retina(4-inch 64-bit)
不起作用。 然后,我要更新我的库与波纹pipe设置更改。
我为三个目标做同样的事情:
对于体育模拟器以及设备,我把通用库,并在此我运行脚本: –
在此之后,我再次构build库和使用,因为我以前在我的项目。 但iPhone Retina(4-inch 64-bit)
Undefined symbols for architecture x86_64:
依然存在同样的问题Undefined symbols for architecture x86_64:
所以,我的问题是,是否有任何额外的更新需要更新lib的arm64或我在上面的步骤中的任何错误。 如果我错了,请通知我。
更新我的静态库,以支持64Bit architecture
需要什么样的更改
注意:
我要求我自己创build的库更新。 我不使用第三方库。 更新
我用这个lipo -info testingLibImport/libLibNSlog.a
命令到我的terminal输出是:
Architectures in the fat file: testingLibImport/libLibNSlog.a are: armv7 armv7s i386 arm64
我在XCode 6.4中find的另一个解决scheme是添加ONLY_ACTIVE_ARCH = NO ,而不指定体系结构。 所以
xcodebuild -target TargetName ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphonesimulator BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"
将在您的库中构buildi386和x86_64体系结构。
这里是我的完全通用的lib运行脚本来构build所有的体系结构。
# define output folder environment variable UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal # Step 1. Build Device and Simulator versions xcodebuild -target TargetName ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" xcodebuild -target TargetName ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphonesimulator BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" # make sure the output directory exists mkdir -p "${UNIVERSAL_OUTPUTFOLDER}" # Step 2. Create universal binary file using lipo lipo -create -output "${UNIVERSAL_OUTPUTFOLDER}/lib${PROJECT_NAME}.a" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/lib${PROJECT_NAME}.a" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/lib${PROJECT_NAME}.a" # Last touch. copy the header files. Just for convenience cp -R "${BUILD_DIR}/${CONFIGURATION}-iphoneos/include" "${UNIVERSAL_OUTPUTFOLDER}/"
很多东西我得到解决办法。 一些Xcode不知道有自动出现Standard architectures (including 64-bit) (armv7,armv7s,arm64)
但在我的情况下没有选项进入我的静态库项目 。 所以我要添加这个手动像: –
并select此选项: –
在此之后,我重新生成我的静态库,并用于我的项目,现在工作正常。 而且我还用lipo命令检查了输出到不同的terminal: –
testingLibImport / libLibNSlog.a是:armv7 armv7s i386 x86_64 arm64
昨天我也遇到了同样的问题,经过大量的search和尝试不同的解决scheme之后,我放弃了自己的尝试。 我从所提供的不同解决scheme中可以理解的是,当我运行“lipo -info library.a”它不是为x86_64架构而构build的。 于是决定放弃总体方法,做了一个简单的尝试。
- 正如在这篇文章中所build议的,我将armv7,armv7s和arm64添加到了架构中。
- 用iphone模拟器(32位)build立静态库项目
- 用iphone模拟器(64位)build立静态库项目
- 使用iOS设备构build静态库项目
- 转到构buildpath(在派生数据下)
- 将模拟器和设备输出复制到通用文件夹
- 在terminal窗口中使用lipo命令来创build通用库
lipo命令:lipo -create -output newlibraryname.a simulatorlibraryname.a devicelibraryname.a
整合新创build的通用静态库和它的工作!
对不起,这么迟才发布其他解决scheme 当我试图find一个解决scheme来解决这个问题的时候,我很久以前就find了这个解决scheme,这个解决scheme可以帮助我在每次build立通用库的时候使用lipo命令创build一个通用库。
那么,这是另一种方法,那些使用聚合方法来build立通用图书馆的方法
只是做一个小的改变,如下所述在你的聚合脚本模拟器来build立通用库 –
xcodebuild -target ProductName -configuration $ {CONFIGURATION} -sdk iphonesimulator ARCHS =“i386 x86_64” BUILD_DIR =“$ {BUILD_DIR}”BUILD_ROOT =“$ {BUILD_ROOT}”SYMROOT =“$ {SYMROOT}”
请注意包含多个架构,而不是使用单一架构方法 –
xcodebuild -target ProductName -configuration $ {CONFIGURATION} -sdk iphonesimulator -arch i386 BUILD_DIR =“$ {BUILD_DIR}”BUILD_ROOT =“$ {BUILD_ROOT}”SYMROOT =“$ {SYMROOT}”
只是ARCHS =“i386 x86_64”将为你做魔术。
您可以使用下面的lipo命令来确认这一点: lipo -info newLibraryName.a
希望这为像我这样的其他人节省了时间!