Apple Mach-O连接器警告。 lib / libxyz.a在文件lib / libxyz.a中缺少必需的体系结构i386

时间:2014-03-07 09:13:23

标签: ios iphone xcode

我是Apple iOS开发的新手。我正在尝试创建静态库并将其添加到主应用程序。

  • 创建了库项目,并将其作为依赖项目添加到主应用程序中。它有效。
  • 现在我从Library项目(出现在debug-iphoneos下)中获取lib.a(静态库)并复制到Main应用程序。测试了主应用程序 - 它可以工作。

现在,当我尝试将主应用程序复制到其他位置(甚至更改文件夹名称 - 其中存在主应用程序)并尝试在模拟器上运行时,我收到以下错误: 忽略文件/Users/.../lib.a,缺少文件/ Users /.../ lib.a中所需的体系结构i386

我真的不了解路径上的关系/依赖。

1 个答案:

答案 0 :(得分:1)

问题解决了。

我正在使用XCode 5.0.2和iOS 7.当我编译静态库时,Xcode表示它正在构建一个通用库(但实际上并非如此)。 '产品'目录显示了libxyz.a(位于iphoneos /目录中) - 这实际上是针对ARM6& ARM7 for iPhone设备。所以当我拿这个' libxyz.a'文件并在链接器用来发出警告的另一个项目中使用它。缺少必要的架构i386'。

我已关注http://www.raywenderlich.com/41377/creating-a-static-library-in-ios-tutorial

使用该脚本生成单个二进制文件,其中包含模拟器和模拟器。 iphone设备二进制文件。

# define output folder environment variable
UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal

# Step 1. Build Device and Simulator versions
xcodebuild -target ImageFilters ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos  BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"
xcodebuild -target ImageFilters -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}/"