Dam*_*kis 13 clang ld libcrypto xcode11
我的项目使用 CMake 构建,但在 Mac 上构建时使用本地 macOS 版本的 clang 和 ld。
在 macOS 10.15 Catalina 上升级到 Xcode 11 后,我无法链接并出现以下错误:ld: cannot link directly with dylib/framework, your binary is not an allowed client of /usr/lib/libcrypto.dylib for architecture x86_64.
这与新应用公证有关吗?是否有不需要项目在 Xcode 中的修复(我使用 CLion 在 macOS 上开发)或不需要链接我自己的 OpenSSL 构建?
任何帮助表示赞赏。
Mar*_*aux 13
当FindOpenSSL.cmake代码查找库并将结果存储在 CMake 缓存中时,您可以在尝试查找 OpenSSL 之前强制设置路径。该FindOpenSSL.cmake代码不会替换您的路径。
if (APPLE)
# This is a bug in CMake that causes it to prefer the system version over
# the one in the specified ROOT folder.
set(OPENSSL_ROOT_DIR ${OPENSSL_ROOT_DIR} /usr/local/Cellar/openssl@1.1/1.1.1g/)
set(OPENSSL_CRYPTO_LIBRARY ${OPENSSL_ROOT_DIR}/lib/libcrypto.dylib CACHE FILEPATH "" FORCE)
set(OPENSSL_SSL_LIBRARY ${OPENSSL_ROOT_DIR}/lib/libssl.dylib CACHE FILEPATH "" FORCE)
endif()
find_package(OpenSSL REQUIRED)
Run Code Online (Sandbox Code Playgroud)
确保清除 CMake 缓存,因为一旦找到路径错误的库,即使您在项目上重新运行 CMake,此 hack 也不会修复它。
我已经从 brew 安装了 OpenSSL,并且find_package似乎检测到了 brew 版本,但它尝试将项目链接到系统中安装的 OpenSSL,即 LibreSSL。
我试图强制find_package设置库的确切路径,但它什么也没做:
if(APPLE)
set(OPENSSL_ROOT_DIR /usr/local/Cellar/openssl@1.1/1.1.1d/)
endif()
Run Code Online (Sandbox Code Playgroud)
所以我最终通过手动设置依赖项,这并不理想,但它同时适用于开发。
# OpenSSL
find_package(OpenSSL REQUIRED)
if(OPENSSL_FOUND)
if(APPLE)
include_directories(/usr/local/Cellar/openssl@1.1/1.1.1d/include)
list(APPEND LIB_LIST /usr/local/Cellar/openssl@1.1/1.1.1d/lib/libssl.dylib)
list(APPEND LIB_LIST /usr/local/Cellar/openssl@1.1/1.1.1d/lib/libcrypto.dylib)
message(STATUS "OpenSSL Version: ${OPENSSL_VERSION} ${OPENSSL_INCLUDE_DIR} ${OPENSSL_LIBRARIES}")
else()
include_directories(${OPENSSL_INCLUDE_DIR})
list(APPEND LIB_LIST ${OPENSSL_LIBRARIES})
message(STATUS "OpenSSL Version: ${OPENSSL_VERSION} ${OPENSSL_INCLUDE_DIR} ${OPENSSL_LIBRARIES}")
endif()
endif()
Run Code Online (Sandbox Code Playgroud)
Cmake 输出提供此信息,它从 brew 检测 OpenSSL 库,但与系统库链接。不知道为什么。
-- OpenSSL Version: 1.1.1d /usr/local/Cellar/openssl@1.1/1.1.1d/include /usr/lib/libssl.dylib;/usr/lib/libcrypto.dylib
Run Code Online (Sandbox Code Playgroud)
希望这有帮助!
| 归档时间: |
|
| 查看次数: |
7164 次 |
| 最近记录: |