我最近下载了Xcode 7 beta,Xcode抱怨我的一些C库没有被编译成BitCode.我如何告诉Clang生成与iOS兼容的BitCode?我在stackoverflow上看到了类似的答案,但我不知道它们是否适用于为iOS生成BitCode库.
编辑:
我正在使用正确的设置-fembed-bitcode,但是当我尝试存档时,我收到错误:ld:警告:忽略文件XXXX/XXXX,文件是为存档构建的,而不是链接的架构(arm64).当我使用-fembed-bitcode-marker时,我可以存档,但是我收到错误:无法生成完整的bitcode包,因为XX/XX仅使用bitcode标记构建.必须从启用了bitcode的Xcode存档构建生成库.
什么是错误的任何想法?该库正在成功编译,但它不允许我存档.我创建了一个简单的添加函数并将其放入库中,我得到了相同的症状,因此它不是我正在编译的库.
编辑2:您必须使用bitcode和lipo一起构建arm64和armv7版本.使用bitcode在归档时不会消除对胖库的需求.来源:https://forums.developer.apple.com/message/25132#25132
我有一个由其他公司建立的静态库.我想知道它是否是一个包含bitcode的静态库,哪个命令可以在终端中检测到它?
我一直在更新一个静态库来支持bitcode,从我的研究中我发现了两种实现方法:
这两个选项有什么区别吗?
我注意到的唯一区别是,通过使用fembed-bitcode,生成的iphonesimulator静态库将在启用完全bitcode的情况下构建(在我的情况下,二进制大小从5MB变为13MB,我可以检查bitcode支持使用otool),这看起来似乎不大使用它有任何不同.
我正在构建一个iOS静态库,我想为bitcode提供支持.为了实现这一点,我转到Build settings,搜索"custom compiler flags"并添加-fembed-bitcode.这使用bitcode构建库,在XCode 7下一切正常.
然而,按照上面的方法,我放松了与XCode 6的向后兼容性.据说我必须向我的用户发送2个不同的库版本,一个带有bitcode标志,一个没有,因为不是每个人都升级到XCode 7.
有没有办法让bitcode启用库并具有向后兼容性,而无需发送2个不同的版本?
您好@Vinicius Jarina感谢您的留言.我知道你可以创建一个胖库,我想这是一种常见的做法.到目前为止我所做的是为两种架构构建:
xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdK iphoneos
xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphonesimulator
Run Code Online (Sandbox Code Playgroud)
然后调用lipo打包在胖库中,如:
lipo -create "${DEVICE_DIR}/${FMK_NAME}" "${SIMULATOR_DIR}/${FMK_NAME}" -output "${INSTALL_DIR}/Versions/${FMK_VERSION}/${FMK_NAME}"
Run Code Online (Sandbox Code Playgroud)
但是,我现在该怎么办呢?我根据这个链接尝试了类似的东西,但没有运气:
xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphoneos
xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphonesimulator
xcodebuild -configuration "Release" OTHER_CFLAGS='-fembed-bitcode' -target "${FMK_NAME}" -sdk iphonesimulator
xcodebuild -configuration "Release" OTHER_CFLAGS='-fembed-bitcode' -target "${FMK_NAME}" -sdk iphoneos
Run Code Online (Sandbox Code Playgroud)
然后像这样创建一个胖lib:
lipo -create "${DEVICE_DIR}/${FMK_NAME}" "${SIMULATOR_DIR}/${FMK_NAME}" -output "${INSTALL_DIR}/Versions/${FMK_VERSION}/${FMK_NAME}"
Run Code Online (Sandbox Code Playgroud)
我如何在我的scipt中包含两者,然后将它们打包到一个胖库中?
我终于成功完成了这项工作,我在这里列出了可能面临同样问题的其他人的解决方案:
xcodebuild -configuration "Release" ENABLE_BITCODE=NO …Run Code Online (Sandbox Code Playgroud) 当我尝试使用XCode 7 + iOS SDK 9使用OpenCV 2.4 iOS编译我的XCode项目时,XCode抱怨说
ld:'opencv2.framework/opencv2(alloc.o)'不包含bitcode.您必须在启用bitcode(Xcode设置ENABLE_BITCODE)的情况下重建它,从供应商处获取更新的库,或禁用此目标的bitcode.对于架构arm64
clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)
并拒绝链接.经过一些谷歌搜索,结果是因为Apple在App Store中添加了一个名为Bitcode的新功能,用于优化应用程序.虽然OpenCV iOS二进制文件尚未更新为包含Bitcode,但它无法通过链接阶段.
一些参考指出了一个禁用的临时解决方案,ENABLE_BITCODE因此可以在没有Bitcode的情况下完成链接.这将阻止为Apple Watches编译应用程序,因为Bitcode对于Watch Apps是强制性的.因此我的问题是,是否有一些(最简单的)方法来编译启用Bitcode的iOS OpenCV?(更好地使用编译框架的下载链接)
我的XCode项目是由Unity生成的,所以我能够毫无错误地构建项目.
但是,当我尝试将其归档为临时,我得到这个:
ld:无法生成bitcode包,因为'/Users/myuser/Desktop/device3/Libraries/Plugins/iOS/AdmobPlugin.a(UnityEncoder.o)'是在没有完整bitcode的情况下构建的.必须从Xcode Archive或Install build for architecture arm64生成bitcode的所有目标文件和库
在这种情况下需要什么?