使用 Bitcode 使 CMake 输出 Dylib 或 Framework
Getting CMake to output Dylib or Framework with Bitcode
在构建用于 mac/tv/iOS 项目的框架时,我决定构建一个框架并包含位码,以防万一。但是,我的输出框架不包含位码。
我可以看到每个源文件都被调用了 -fembed-bitcode
,但是当我检查 .dylib
和 otool -l library.dylib
时,没有 __LLVM
部分。切换到创建静态库,我可以看到 __LLVM
部分。
为什么 cmake 没有正确构建库?
为了正确构建动态库,无论是否在框架中,您都需要查看 cmake 输出的最后一行。在那里你会看到 clang
调用了所有 .o
文件,输出文件是 .dylib
。此行缺失 -fembed-bitcode
并且在链接库时您需要再次传递 -fembed-bitcode
标志。
所以通过将标志添加到编译目标和库链接正确添加位码。
target_compile_options( library PUBLIC -fembed-bitcode )
target_link_options( library PUBLIC -fembed-bitcode )
在构建用于 mac/tv/iOS 项目的框架时,我决定构建一个框架并包含位码,以防万一。但是,我的输出框架不包含位码。
我可以看到每个源文件都被调用了 -fembed-bitcode
,但是当我检查 .dylib
和 otool -l library.dylib
时,没有 __LLVM
部分。切换到创建静态库,我可以看到 __LLVM
部分。
为什么 cmake 没有正确构建库?
为了正确构建动态库,无论是否在框架中,您都需要查看 cmake 输出的最后一行。在那里你会看到 clang
调用了所有 .o
文件,输出文件是 .dylib
。此行缺失 -fembed-bitcode
并且在链接库时您需要再次传递 -fembed-bitcode
标志。
所以通过将标志添加到编译目标和库链接正确添加位码。
target_compile_options( library PUBLIC -fembed-bitcode )
target_link_options( library PUBLIC -fembed-bitcode )