我正在为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
似乎iPhoneSimulator也不支持i386?!当我使用armv7 lib for iPhone模拟器时,它说缺少i386架构的符号,所以我非常确定iPhone模拟器支持i386。
任何人都知道如何为模拟器编译lib?或者有一种更简单的方法,将源代码(如this repo)导入Xcode,然后让它为所有架构构建通用库?从现在起,我必须为每个arch构建每个lib,然后使用lipo
组合它们。
答案 0 :(得分:1)
经过几个小时的搜索,我终于找到了解决方案:Apple用工具链中的clang取代了gcc,并添加了一个" -triple"将OSX指定为目标的选项。如果我们向-miphoneos-version-min=8.0
和CFLAGS
添加CXXFLAGS
(或任何您想要的版本),那么它就知道目标是iOS并让我们编译。请务必在iPhoneSimulator.platform
中使用-isysroot
。
答案 1 :(得分:0)
尝试强制编译器为gcc。希望有所帮助。
CC="/usr/bin/clang" \
CXX="/usr/bin/clang++"