Xcode无法为体系结构x86_64构建静态库:

时间:2015-06-30 11:55:53

标签: ios xcode static-libraries x86-64

我在一个单独的Xcode项目中创建并构建了一个静态库,我现在将其添加到iOS应用程序的第二个Xcode项目中。要创建静态库并生成.a文件,我按照Creating a Static Library in iOS Tutorial中的说明操作。我将它集成到iOS应用程序项目中,它构建并运行32位iPhone模拟器(iPhone 5及更低版本),但在为iPhone 6及更高版本的模拟器构建时,我得到Undefined symbols for architecture x86_64:

在静态lib项目的项目和目标设置中,我看到我将有效架构设置为标准......我还应该检查什么?为什么会发生这种情况?

提前致谢

编辑:目标>中的脚本Buld Phases包含以下命令:

xcodebuild -target MyLib ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos  BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"
xcodebuild -target MyLib -configuration ${CONFIGURATION} -sdk iphonesimulator -arch i386 BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"

我认为这适用于设备中的所有iOS版本(如果我错了,请纠正我......),但仅适用于32位模拟器。我试图将最后一个命令改为这两个:

xcodebuild -target MyLib -configuration ${CONFIGURATION} -sdk iphonesimulator -arch i386 BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"
xcodebuild -target MyLib -configuration ${CONFIGURATION} -sdk iphonesimulator -arch x86_64 BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"

但只有最后一个命令似乎是被采取的。然后我试了一下:

xcodebuild -target MyLib -configuration ${CONFIGURATION} -sdk iphonesimulator "ARCHS=i386 x86_64" "VALID_ARCHS=i386 x86_64" BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"

但这对32位和64位模拟器也不起作用......

编辑2:这是完整的脚本,没有64位的更改:

# define output folder environment variable
UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal
# Step 1. Build Device and Simulator versions
xcodebuild -target MyLib ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos  BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"
xcodebuild -target MyLib -configuration ${CONFIGURATION} -sdk iphonesimulator -arch i386 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}/"

1 个答案:

答案 0 :(得分:0)

您还可以按如下方式为x86_64构建(添加x86_64):

xcodebuild -target MyLib -configuration ${CONFIGURATION} -sdk 
iphonesimulator -arch x86_64 -arch i386 BUILD_DIR="${BUILD_DIR}" 
BUILD_ROOT="${BUILD_ROOT}"