为 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
.
我做了同样的事情来编译 armv7s
和 arm64
架构。使用-arch i386
,我不能再使用-isysroot
和iPhoneOS.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
(或您想要的任何版本)添加到 CFLAGS
和 CXXFLAGS
,那么它会知道目标是 iOS 并让我们编译。确保在 -isysroot
.
中使用 iPhoneSimulator.platform
我正在为 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
.
我做了同样的事情来编译 armv7s
和 arm64
架构。使用-arch i386
,我不能再使用-isysroot
和iPhoneOS.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
(或您想要的任何版本)添加到 CFLAGS
和 CXXFLAGS
,那么它会知道目标是 iOS 并让我们编译。确保在 -isysroot
.
iPhoneSimulator.platform