CMake 为 OpenSSL 返回不匹配的包含和库
CMake returning mismatched includes and libraries for OpenSSL
我通过 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
/@@@
所以它给了我 headers 来自 mac 端口的 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 库?
您可以使用 OPENSSL_ROOT_DIR
environment 变量(不是 CMake 变量!)提示 CMake 关于 OpenSSL 的位置,方法是将其设置为/opt/local
。 CMake not able to find OpenSSL library 中描述的其他提示方式也可以使用。
请注意,从链接器和运行时加载程序 "hide" 系统目录 /usr/lib
下的库可能非常棘手。这是因为项目使用的其他库可能位于该目录中,这可能会阻止 CMake 构建正确的目录列表以传递给链接器或分配给 RPATH。通常,CMake 会对这种情况发出警告。
我通过 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
/@@@
所以它给了我 headers 来自 mac 端口的 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 库?
您可以使用 OPENSSL_ROOT_DIR
environment 变量(不是 CMake 变量!)提示 CMake 关于 OpenSSL 的位置,方法是将其设置为/opt/local
。 CMake not able to find OpenSSL library 中描述的其他提示方式也可以使用。
请注意,从链接器和运行时加载程序 "hide" 系统目录 /usr/lib
下的库可能非常棘手。这是因为项目使用的其他库可能位于该目录中,这可能会阻止 CMake 构建正确的目录列表以传递给链接器或分配给 RPATH。通常,CMake 会对这种情况发出警告。