2014-03-13 48 views
17

前几天我创建了静态库(通用)工作正常与Xcode5.0 SDK7。在更新Xcode5.1SDK7.1不工作,如果我选择模拟器iPhone Retina(4-inch 64-bit)。然后,我将用Bellow设置更改更新我的库。如何更新用于支持arm64 Build的静态库架构?

enter image description here

我做同样的三个目标: -

enter image description here

对于运动模拟器以及设备我把通用lib和在此我运行脚本这一点: - enter image description here

在此之后,我再次构建库和使用,因为我之前在我的项目。但仍然得到同样的问题与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 
+0

http://stackoverflow.com/questions/20234623/parse-error-iphone-retina-4-inch-64bit和http://stackoverflow.com/questions/20264574/missing-required-architecture- x86-64-in-file-libcoreplot-cocoatouch-a可能对您的情况有所帮助 – iPatel

+0

请参阅http://stackoverflow.com/questions/22331908/xcode-5-1-missing-required-architecture-arm64/22370729# 22370729 – Mani

+0

请在我的问题中看到我已经完成了此更改,但得到同样的错误。 –

回答

8

后的东西很多,我得到的解决方案。一些Xcode不知道有自动出现Standard architectures (including 64-bit) (armv7,armv7s,arm64)但在我的情况下没有选项进入我的静态库项目。所以我要添加此手动,如: -

enter image description here

,并选择此选项: - 在

enter image description here

在此之后我重新建立我的静态库和使用我的现在工作正常的项目。我也与脂命令检查,以终端,它的输出会不同,现在: -

testingLibImport/libLibNSlog.a是:ARMv7的armv7s的i386 x86_64的arm64

8

我昨天也遇到了同样的问题,后很多谷歌搜索和尝试不同的解决方案,我放弃了,并尝试在我自己的。我从所提供的不同解决方案中可以了解到,当我运行“lipo -info library.a”时,它不是为x86_64架构而构建的。所以,决定放弃总体方法并做了一个简单的尝试。

  1. 正如在这篇文章中所建议的那样,我在架构中添加了armv7,armv7s和arm64。
  2. 建立与iphone模拟器(32位)
  3. 建立与iphone模拟器(64位)
  4. 建立与iOS设备的静态库项目
  5. 去构建路径的静态库项目的静态库项目(下得到的数据)
  6. 在终端窗口复制既模拟器和设备输出到公共文件夹
  7. 使用脂命令来创建通用库

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

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

+0

在浪费数小时试图让Xcode编译成通用二进制文件之后,这个“大锤”方法完成了这项工作。只希望我早点尝试过。谢谢! – picciano

+0

很好,很简单,很适合我 – BigAl

4

对不起,这么迟才发布另一个解决方案。当我试图找到一种解决方案时,我很久以前就发现了这个解决方案,它可以帮助我在每次创建通用库时使用lipo命令创建通用库的手动工作。

所以,这里是另一种方法,使用聚合的方式来构建通用库

那些只是做在你的总脚本下面提到的模拟器来构建通用库中的一个小的变化 -

xcodebuild联编-target产品名称 - 构型的$ {CONFIGURATION} -sdk iphonesimulator ARCHS = “I386 x86_64的” BUILD_DIR = “$ {BUILD_DIR}” BUILD_ROOT = “$ {BUILD_ROOT}” SYMROOT = “$ {SYMROOT}”

请遵守多种架构,而不是采用单一架构方法列入 -

xcodebuild联编-target产品名称-configuration $ {}配置-sdk iphonesimulator -arch i386的 BUILD_DIR = “$ {} BUILD_DIR” BUILD_ROOT =” $ {BUILD_ROOT}“SYMROOT =”$ {SYMROOT}“

只需ARCHS =”i386 x86_64“将为您提供魔法。

您可以通过使用以下命令脂 脂-info newLibraryName.a

希望这可以节省时间,很多人喜欢我证实了这一点!

13

我在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}" 

将在您的库中构建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}/" 
+0

非常感谢。正是我想要的。 – atulkhatri