为 iPhone 模拟器用 arch i386 编译 C 库?

Compile C library with arch i386 for iPhone simulator?

我正在为 Xcode 项目制作一个 C 库,并使用 -arch armv7 成功编译,它可以在 iPhone 设备上使用。这是我使用的命令:

./configure \
--host=arm-apple-darwin \
CFLAGS="-arch armv7 \
-isysroot /Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk" \
CXXFLAGS="-arch armv7 \
-isysroot /Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk" \
LDFLAGS="-L." \
CC="/Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc" \
CXX="/Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++"

然后 make.

我做了同样的事情来编译 armv7sarm64 架构。使用-arch i386,我不能再使用-isysrootiPhoneOS.platform,我猜是因为iPhoneOS不支持i386,所以我改成了iPhoneSimulator.platform:

./configure \
--host=arm-apple-darwin \
CFLAGS="-arch armv7 \
-isysroot /Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk" \
CXXFLAGS="-arch armv7 \
-isysroot /Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk" \
LDFLAGS="-L." \
CC="/Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc" \
CXX="/Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++"

但是还是不行。当我尝试用 iPhoneOS.platform:

编译 i386 时出现同样的错误
checking whether the C compiler works... no
configure: error: C compiler cannot create executables

好像iPhone模拟器也不支持i386?!当我为 iPhone 模拟器使用 armv7 库时,它说缺少 i386 架构的符号,所以我很确定 iPhone 模拟器支持 i386。

有人知道如何为模拟器编译库吗?还是有更简单的方法,将源代码(如this repo)导入Xcode,然后让它为所有架构构建一个通用库?从现在开始,我必须为每个拱门构建每个库,然后使用 lipo.

组合它们

尝试强制编译器使用 gcc。希望有所帮助。

CC="/usr/bin/clang" \
CXX="/usr/bin/clang++"

搜索了几个小时后,我终于找到了解决方案:Apple 在其工具链中用 clang 替换了 gcc,并添加了一个“-triple”选项,将 OSX 指定为目标。如果我们将 -miphoneos-version-min=8.0(或您想要的任何版本)添加到 CFLAGSCXXFLAGS,那么它会知道目标是 iOS 并让我们编译。确保在 -isysroot.

中使用 iPhoneSimulator.platform