如何更新我们的静态库架构以支持arm64 Build?

Nit*_*hel 19 static-libraries ios ios7 arm64 xcode5.1

几天前我创建的静态库(Universal)工作正常Xcode5.0 SDK7.更新Xcode5.1SDK7.1,如果我选择模拟器不起作用iPhone Retina(4-inch 64-bit).然后我将使用Bellow设置更改来更新我的lib.

在此输入图像描述

我为三个目标做同样的事情: -

在此输入图像描述

对于运动模拟器以及设备我把Universal lib和这个我运行脚本这个: - 在此输入图像描述

在此之后我再次构建lib并使用我之前完成的项目.但仍然遇到同样的问题iPhone Retina(4-inch 64-bit) Undefined symbols for architecture x86_64:


所以,我的问题是,为更新lib需要进行任何其他更改,或者我在上面的步骤中犯了任何错误.如果我错了,请告诉我.

更新我的静态库以进行支持需要进行哪些更改 64Bit architecture

注意:

我要求我自己创建的库更新.我没有使用第三方库. 更新

lipo -info testingLibImport/libLibNSlog.a在终端中使用了这个命令,输出是:

Architectures in the fat file: testingLibImport/libLibNSlog.a are: armv7 armv7s i386 arm64 
Run Code Online (Sandbox Code Playgroud)

dwx*_*wxw 14

我在XCode 6.4中找到的另一个解决方案是添加ONLY_ACTIVE_ARCH = NO并且不指定体系结构.所以

xcodebuild -target TargetName ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphonesimulator BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"
Run Code Online (Sandbox Code Playgroud)

将在您的库中构建i386和x86_64体系结构.


这是我用于构建所有体系结构的完整通用lib运行脚本.

# 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}/"
Run Code Online (Sandbox Code Playgroud)


Dee*_*ger 10

昨天我也遇到了同样的问题,经过大量的谷歌搜索和尝试不同的解决方案,我放弃了自己的尝试.从我提供的不同解决方案中我可以理解的是,当我运行"lipo -info library.a"时,它不是为x86_64架构而构建的.所以,决定放弃聚合方法并做了一个简单的尝试.

  1. 正如本文所述,我将armv7,armv7s和arm64添加到了架构中.
  2. 使用iphone模拟器(32位)构建静态库项目
  3. 使用iphone模拟器(64位)构建静态库项目
  4. 使用iOS设备构建静态库项目
  5. 转到构建路径(在派生数据下)
  6. 将模拟器和设备输出复制到公共文件夹
  7. 在终端窗口中使用lipo命令创建通用库

lipo命令:lipo -create -output newlibraryname.a simulatorlibraryname.a devicelibraryname.a

集成了新创建的通用静态库,它工作了!


Nit*_*hel 9

经过很多事情我得到了解决方案.一些xcode不知道有自动出现,Standard architectures (including 64-bit) (armv7,armv7s,arm64)但在我的情况下,我的静态库项目没有选项.所以我要手动添加这个: -

在此输入图像描述

并选择此选项: -

在此输入图像描述

在此之后,我重新构建我的静态库,并在我的项目中使用,现在工作正常.我还检查了lipo命令到终端输出到现在不同: -

testingLibImport/libLibNSlog.a是:armv7 armv7s i386 x86_64 arm64