我通过macports安装了最新版本的OpenSSL(1.0.2q),我试图在依赖OpenSSL的Mac上构建一个项目,并发现CMake似乎返回了错误的库路径或错误的包含路径。 :
message("@@@")
message(${OPENSSL_INCLUDE_DIR})
message(${OPENSSL_SSL_LIBRARY})
message("/@@@")
打印:
@@@
/opt/local/include
/usr/lib/libssl.dylib
/@@@
因此,它为我提供了来自macports的OpenSSL头和来自系统的库。
我发现这是因为构建外部库失败并出现链接错误:
Undefined symbols for architecture x86_64:
"_X509_check_host", referenced from:
_ma_tls_verify_server_cert in libmariadbclient.a(openssl.c.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
如何仅使CMake查找和使用macports库?
答案 0 :(得分:2)
您可以通过将OPENSSL_ROOT_DIR
environment 变量(不是 CMake 变量!)设置为/opt/local
来提示CMake有关OpenSSL的位置。 CMake not able to find OpenSSL library中所述的其他提示方式也可以使用。
请注意,从链接器和运行时加载器“隐藏”系统目录/usr/lib
下的库可能非常棘手。这是因为项目使用的其他库可以位于该目录中,并且可能阻止CMake构建正确的目录列表以传递给链接器或分配给RPATH。通常,CMake会警告此类情况。