【问题标题】:CMake returning mismatched includes and libraries for OpenSSLCMake 为 OpenSSL 返回不匹配的包含和库
【发布时间】:2019-05-25 18:18:16
【问题描述】:

我通过 macports 安装了最新版本的 OpenSSL (1.0.2q),我试图在我的 mac 上构建一个依赖于 OpenSSL 的项目,发现 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 库?

【问题讨论】:

  • 与general case 一样,您可以尝试将环境 变量OPENSSL_ROOT_DIR 设置为/opt/local。请注意,从链接器和运行时加载程序“隐藏”系统目录/usr/lib 下的库可能非常棘手。通常,CMake 会针对此类情况发出警告。
  • 不起作用:-- SSL 支持:OPENSSL 库:/usr/lib/libssl.dylib;/usr/lib/libcrypto.dylib
  • 在新尝试之前您是否清除了缓存?
  • 不,现在可以了。把它变成一个答案,这样我就可以接受了。

标签: macos cmake openssl macports


【解决方案1】:

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


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

【讨论】:

    猜你喜欢
    • 2012-12-01
    • 2013-01-14
    • 2015-03-12
    • 1970-01-01
    • 2013-04-21
    • 2020-09-07
    • 1970-01-01
    • 2013-12-09
    相关资源
    最近更新 更多