如何更新我们的支持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的。 于是决定放弃总体方法,做了一个简单的尝试。

  1. 正如在这篇文章中所build议的,我将armv7,armv7s和arm64添加到了架构中。
  2. 用iphone模拟器(32位)build立静态库项目
  3. 用iphone模拟器(64位)build立静态库项目
  4. 使用iOS设备构build静态库项目
  5. 转到构buildpath(在派生数据下)
  6. 将模拟器和设备输出复制到通用文件夹
  7. 在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

希望这为像我这样的其他人节省了时间!