使用 CMAKE CHECK_FUNCTION_EXISTS 时如何禁用 BITCODE

问题描述

我面临的问题是 check_function_exists 宏失败,不是因为它测试的函数不存在,而是因为它尝试链接的库没有位码。>

例如,当运行 cmake 为 libwebsockets 的 iOS 模拟器版本生成构建文件时,它会尝试在 OpenSSL 库中检查此 HMAC_CTX_new

CHECK_FUNCTION_EXISTS(${VARIA}HMAC_CTX_new LWS_HAVE_HMAC_CTX_new PARENT_SCOPE)

OpenSSL 库是在没有位码的情况下构建的,但它们确实有 HMAC_CTX_new 函数,所以这是由此产生的错误:

ld: warning: -headerpad_max_install_names is ignored when used with -bitcode_bundle (Xcode setting ENABLE_BITCODE=YES)
ld: '/test/openssl/prebuilt/ios/libcrypto.a(hmac.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE),obtain an updated library from the vendor,or disable bitcode for this target. for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

** BUILD FAILED **


The following build commands failed:
    Ld /test/ios-build/CMakeFiles/CMakeTmp/Debug/cmTC_3ccfb.app/cmTC_3ccfb normal
(1 failure)

问题是 -fembed-bitcode-marker 标志被传递给编译命令,但我不确定从哪里或如何删除它:

CompileC /test/ios-build/CMakeFiles/CMakeTmp/CMAKE_TRY_COMPILE.build/Debug-iphoneos/cmTC_3ccfb.build/Objects-normal/arm64/CheckFunctionExists.o /opt/homebrew/Cellar/cmake/3.20.2/share/cmake/Modules/CheckFunctionExists.c normal arm64 c com.apple.compilers.llvm.clang.1_0.compiler (in target 'cmTC_3ccfb' from project 'CMAKE_TRY_COMPILE')
    cd /test/ios-build/CMakeFiles/CMakeTmp
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -x c -target arm64-apple-ios9.0 -fmessage-length\=0 -fdiagnostics-show-note-include-stack -fmacro-backtrace-limit\=0 -Wno-trigraphs -fpascal-strings -O0 -Wno-missing-field-initializers -Wno-missing-prototypes -Wno-return-type -Wno-missing-braces -Wparentheses -Wswitch -Wno-unused-function -Wno-unused-label -Wno-unused-parameter -Wno-unused-variable -Wunused-value -Wno-empty-body -Wno-uninitialized -Wno-unknown-pragmas -Wno-shadow -Wno-four-char-constants -Wno-conversion -Wno-constant-conversion -Wno-int-conversion -Wno-bool-conversion -Wno-enum-conversion -Wno-float-conversion -Wno-non-literal-null-conversion -Wno-objc-literal-conversion -Wshorten-64-to-32 -Wpointer-sign -Wno-newline-eof -DCMAKE_INTDIR\=\"Debug-iphoneos\" -DKEYWORD\=__inline -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.5.sdk -fstrict-aliasing -Wdeprecated-declarations -g -Wno-sign-conversion -Wno-infinite-recursion -Wno-comma -Wno-block-capture-autoreleasing -Wno-strict-prototypes -Wno-semicolon-before-method-body -fembed-bitcode-marker -I/test/ios-build/CMakeFiles/CMakeTmp/Debug/include -isystem /test/cocos2d/external/openssl/include -I/test/ios-build/CMakeFiles/CMakeTmp/CMAKE_TRY_COMPILE.build/Debug-iphoneos/cmTC_3ccfb.build/DerivedSources-normal/arm64 -I/test/ios-build/CMakeFiles/CMakeTmp/CMAKE_TRY_COMPILE.build/Debug-iphoneos/cmTC_3ccfb.build/DerivedSources/arm64 -I/test/ios-build/CMakeFiles/CMakeTmp/CMAKE_TRY_COMPILE.build/Debug-iphoneos/cmTC_3ccfb.build/DerivedSources -F/test/ios-build/CMakeFiles/CMakeTmp/Debug -Wall -Wconversion -Wsign-compare -Wstrict-aliasing -fvisibility\=hidden -Wundef -Wuninitialized -Wtype-limits -Wignored-qualifiers -Werror -Wno-deprecated-declarations -pthread -Wno-error\=unused-command-line-argument -DCHECK_FUNCTION_EXISTS\=HMAC_CTX_new -std\=gnu11 -MMD -MT dependencies -MF /test/ios-build/CMakeFiles/CMakeTmp/CMAKE_TRY_COMPILE.build/Debug-iphoneos/cmTC_3ccfb.build/Objects-normal/arm64/CheckFunctionExists.d --serialize-diagnostics /test/ios-build/CMakeFiles/CMakeTmp/CMAKE_TRY_COMPILE.build/Debug-iphoneos/cmTC_3ccfb.build/Objects-normal/arm64/CheckFunctionExists.dia -c /opt/homebrew/Cellar/cmake/3.20.2/share/cmake/Modules/CheckFunctionExists.c -o /test/ios-build/CMakeFiles/CMakeTmp/CMAKE_TRY_COMPILE.build/Debug-iphoneos/cmTC_3ccfb.build/Objects-normal/arm64/CheckFunctionExists.o

我尝试将其添加到我的根 CMakeLists.txt 的顶部,但没有成功: set(CMAKE_XCODE_ATTRIBUTE_ENABLE_BITCODE "NO")

有没有办法禁用 CHECK_FUNCTION_EXISTS 生成的临时目标的位码,或者以某种方式从传递给它的编译器标志列表中删除 -fembed-bitcode-marker 标志?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...