CMake返回不匹配的包含和OpenSSL库

时间:2018-12-27 19:13:33

标签: macos cmake openssl macports

我通过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库?

1 个答案:

答案 0 :(得分:2)

您可以通过将OPENSSL_ROOT_DIR environment 变量(不是 CMake 变量!)设置为/opt/local来提示CMake有关OpenSSL的位置。 CMake not able to find OpenSSL library中所述的其他提示方式也可以使用。


请注意,从链接器和运行时加载器“隐藏”系统目录/usr/lib下的库可能非常棘手。这是因为项目使用的其他库可以位于该目录中,并且可能阻止CMake构建正确的目录列表以传递给链接器或分配给RPATH。通常,CMake会警告此类情况。