- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在为 iOS 9 使用 -fembed-bitcode
重建一些开源库,其中涉及配置 configure
以使用 iPhone SDK 进行交叉编译。
对于基于 C 的库,一切正常,但是 2 个 C++ 库(libprotobuf 和 libexiv2)我都无法链接并出现同样的错误:
ld: -bind_at_load and -bitcode_bundle (Xcode setting ENABLE_BITCODE=YES) cannot be used together
这是 libexiv2 的完整链接命令:
../libtool --mode=link /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -arch armv7 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk -miphoneos-version-min=8.0 -fembed-bitcode -ldl -L/Users/pol/Source/Libraries/libexiv2/exiv2-0.25/../../libexpat/iPhoneOS/lib -L../xmpsdk/src -o libexiv2.la basicio.lo bmpimage.lo canonmn.lo casiomn.lo convert.lo cr2image.lo crwimage.lo datasets.lo easyaccess.lo epsimage.lo error.lo exif.lo futils.lo fujimn.lo gifimage.lo http.lo image.lo iptc.lo jp2image.lo jpgimage.lo makernote.lo metadatum.lo minoltamn.lo mrwimage.lo nikonmn.lo olympusmn.lo orfimage.lo panasonicmn.lo pentaxmn.lo pgfimage.lo pngimage.lo pngchunk.lo preview.lo properties.lo psdimage.lo rafimage.lo rw2image.lo samsungmn.lo sigmamn.lo sonymn.lo tags.lo tgaimage.lo tiffcomposite.lo tiffimage.lo tiffvisitor.lo types.lo value.lo version.lo xmp.lo xmpsidecar.lo -rpath /Users/pol/Source/Libraries/libexiv2/exiv2-0.25/../iPhoneOS-armv7/lib -version-info 14:0:0 -liconv -lz -lexpat -lxmpsdk
libtool: link: (cd .libs/libexiv2.lax/libxmpsdk.a && /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar x "/Users/pol/Source/Libraries/libexiv2/exiv2-0.25/xmpsdk/src/.libs/libxmpsdk.a")
libtool: link: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar cru .libs/libexiv2.a basicio.o bmpimage.o canonmn.o casiomn.o convert.o cr2image.o crwimage.o datasets.o easyaccess.o epsimage.o error.o exif.o futils.o fujimn.o gifimage.o http.o image.o iptc.o jp2image.o jpgimage.o makernote.o metadatum.o minoltamn.o mrwimage.o nikonmn.o olympusmn.o orfimage.o panasonicmn.o pentaxmn.o pgfimage.o pngimage.o pngchunk.o preview.o properties.o psdimage.o rafimage.o rw2image.o samsungmn.o sigmamn.o sonymn.o tags.o tgaimage.o tiffcomposite.o tiffimage.o tiffvisitor.o types.o value.o version.o xmp.o xmpsidecar.o .libs/libexiv2.lax/libxmpsdk.a/ExpatAdapter.o .libs/libexiv2.lax/libxmpsdk.a/MD5.o .libs/libexiv2.lax/libxmpsdk.a/ParseRDF.o .libs/libexiv2.lax/libxmpsdk.a/UnicodeConversions.o .libs/libexiv2.lax/libxmpsdk.a/WXMPIterator.o .libs/libexiv2.lax/libxmpsdk.a/WXMPMeta.o .libs/libexiv2.lax/libxmpsdk.a/WXMPUtils.o .libs/libexiv2.lax/libxmpsdk.a/XML_Node.o .libs/libexiv2.lax/libxmpsdk.a/XMPCore_Impl.o .libs/libexiv2.lax/libxmpsdk.a/XMPIterator.o .libs/libexiv2.lax/libxmpsdk.a/XMPMeta-GetSet.o .libs/libexiv2.lax/libxmpsdk.a/XMPMeta-Parse.o .libs/libexiv2.lax/libxmpsdk.a/XMPMeta-Serialize.o .libs/libexiv2.lax/libxmpsdk.a/XMPMeta.o .libs/libexiv2.lax/libxmpsdk.a/XMPUtils-FileInfo.o .libs/libexiv2.lax/libxmpsdk.a/XMPUtils.o
libtool: link: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib .libs/libexiv2.a
libtool: link: rm -fr .libs/libexiv2.lax
libtool: link: ( cd ".libs" && rm -f "libexiv2.la" && ln -s "../libexiv2.la" "libexiv2.la" )
mkdir -pv ../bin 2>&1 > /dev/null
libtool: link: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -arch armv7 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk -miphoneos-version-min=8.0 -fembed-bitcode -o ../bin/exiv2 exiv2.o actions.o utils.o -Wl,-bind_at_load -L/Users/pol/Source/Libraries/libexiv2/exiv2-0.25/../../libexpat/iPhoneOS/lib -L/Users/pol/Source/Libraries/libexiv2/exiv2-0.25/xmpsdk/src ./.libs/libexiv2.a -liconv -lz -lexpat -ldl
我只是构建静态库,而不是共享库,以防万一。
更新:关于基于 C 的库,链接命令不包括 -Wl,bind_at_load
例如一个 libpng :
libtool: link: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk -arch arm64 -miphoneos-version-min=8.0 -fembed-bitcode -g -O2 -o pngvalid contrib/libtests/pngvalid.o ./.libs/libpng16.a -lz
PS:完整的构建日志可用here
最佳答案
我想通了:这是由于 configure
生成的 libtool
在链接 C++ 可执行文件时有一个针对旧 OS X 错误的解决方法:
if test "$tagname" = CXX ; then
case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
10.[0123])
compile_command+=" ${wl}-bind_at_load"
finalize_command+=" ${wl}-bind_at_load"
;;
esac
fi
如果 $MACOSX_DEPLOYMENT_TARGET
未定义(最有可能是这种情况),即使在 OS X 上构建时,${MACOSX_DEPLOYMENT_TARGET-10.0}
的计算结果为 10.0
所以解决方法开始了。
解决方案是在使用 -fembed-bitcode
为 iOS 设备构建库之前简单地执行此操作:
export MACOSX_DEPLOYMENT_TARGET="10.4"
关于ios - 使用带有 -fembed-bitcode 的配置和制作构建 C++ 静态库无法链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32622284/
我尝试在连接手机的情况下构建 ios 或 flutter build ios 我收到此错误 ld: '/Users/Library/Developer/Xcode/DerivedData/Runner
我已阅读 this thread在 llvm-dev 上遇到同样的问题:我无法将 llvm-ar archieve 库与其他 bitcode 文件链接到另一个 bitcode 文件 在 llvm-li
我有一个由其他公司构建的静态库。我想知道它是否是包含bitcode的静态库,哪个命令可以在终端中检测到它? 最佳答案 正如其他答案中已经写的那样, otool -l yourlib.a | grep
问题在标题中简单说明。这是我的设置: 构建一个动态框架,可选择链接(弱链接)到 GoogleInteractiveMediaAds.framework。对于使用我的框架的应用程序,GoogleInte
在寻找确定 iOS 二进制文件是否是使用 Bitcode 构建的方法时,我发现了以下帖子: How to check if a framework is BITCODE supported for X
在最新的 1.0.6 版本中,它说是,但不是: $ otool -l linkedin-sdk | grep '__bitcode' 不产生任何输出。 最佳答案 在 LinkedIn 更新他们的 SD
我有 lib.o 错误 我找到了很多这个问题的答案。我在其他链接器标志中添加了 -fembed-bitcode 并在其他 c 标志中添加了 -fembed-bitcode 在项目中我也添加了-femb
我正在尝试将我客户的一个应用程序的新版本提交到 itunes connect,但我收到了这个奇怪的错误 -fembed-bitcode is not supported on versions of
我的应用程序很大,用 Unity3D 制作的普通麻将游戏几乎有 100MB。我想为我的听众提供较小的下载量。 大部分问题来自嵌入在胖二进制文件中的可执行代码(armv7 和arm64 架构)。我不使用
我正在尝试将 watchOS3 应用程序上传到苹果商店,但是我收到了类似下面的拒绝(来自苹果) 无效的可执行文件 - 可执行文件“someWatch Extension”不包含位码。更正这些问题后,您
我最近下载了 Xcode 7 beta,Xcode 提示我的一些 C 库没有被编译成 BitCode。我将如何告诉 Clang 生成与 iOS 兼容的 BitCode?我在 stackoverflow
我正在尝试在启用 Bitcode 的情况下重建 WebRTC iOS 框架,但它不起作用,它给了我错误。错误信息是 clang++: error: unknown argument: '-ffile-
我正在使用 SAW 验证一些 Rust 代码. SAW 要求您编译为 LLVM bitcode ,然后您可以导入并验证。我知道您可以使用 --emit=llvm-bc 生成位码标记为 rustc,这对
iOS 9 通过三种方式引入了 App Thinning: 应用切片 按需资源 Bit Code:iOS App 的一种插件 我可以看到 1. 和 2. 的教程和示例代码,但找不到 Bitcode 的
我尝试将几个适用于 iOS 的开源库编译为带有 bitcode 的共享库。我已将标志 -fembed-bitcode 添加到 CFLAGS 和 LDFLAGS 中。编译正常完成,但一些生成的库(例如
到目前为止,我在使用 CocoaPods 时从未遇到过任何问题(我用它几次将 Parse 集成到我的 iOS 应用程序中)。但是这次我对下面的消息感到困惑。 当我以前使用 CocoaPods 时,项目
我真的很想为我的 iOS 项目添加 Bitcode 支持,但我使用的是 Google Sign In 框架,看起来他们仍然没有向库中添加 Bitcode 支持。 我似乎找不到任何关于这是否即将推出的信
从Xcode 7开始成为第三方框架应该支持的通病之一Bitcode .我们还可以通过在build设置中将 ENABLE_BITCODE 设置为 NO 来禁用 BITCODE。但我不想关闭它,而是想将我
这在 Apple 开发中经常出现——当使用 bitcode 提交到应用商店时,你当然必须包含完整的 bitcode (-fembed-bitcode)。但是有这种中间“标记”模式的原因是什么,它包括部
我正在从源代码为 iOS 构建一个动态框架,启用位码(使用 cmake 和 xcodebuild)。我用 lipo和 install_name_tool制作一个胖二进制文件并更新 LC_ID_DYLI
我是一名优秀的程序员,十分优秀!