Cmake无法找到OpenSSL。

8
想交叉编译一个使用Azure IoT SDK的C应用程序,但不幸的是它需要Cmake。Cmake拒绝构建我的工具链,因为它声称找不到我为目标架构编译的Openssl。
我尝试将OPENSSL_ROOT_DIR添加到它所在的文件夹中。
SET(OPENSSL_ROOT_DIR /path/to/openssl)

我不断地收到错误提示:


  Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the
  system variable OPENSSL_ROOT_DIR (missing: OPENSSL_LIBRARIES) (found
  version "1.0.2g")

我还尝试将系统变量设置为这些文件夹,但似乎它会忽略它们并提示相同的错误。我也尝试将它添加到与我的C编译器相同的文件夹中,但没有用。我已经尝试了所有能想到的方法,但仍然不明白为什么它不起作用。有任何建议吗?

1
看起来,你的 OpenSSL 安装的 根目录/path/to/openssl。为什么你要尝试将 OPENSSL_ROOT_DIR 变量设置为 /path/to/openssl/lib 呢?此外,OPENSSL_INCLUDE_DIR 变量是由 find_package(OpenSSL) 调用设置的,请不要手动设置此变量。 - Tsyvarev
实际上,CMake只找到了OpenSSL库的部分内容:在“缺失”列表中没有INCLUDE_DIR,但有版本(1.0.2g)。这个版本是否与您的OpenSSL安装相对应?在构建目录中的文件CMakeCache.txt中,查找(通过grep或类似方式)包含OPENSSL的条目,并在其中查找包含LIBRARY的条目。哪些条目具有值NOTFOUND - Tsyvarev
@Tsyvarev 是的,它们在 lib/ 目录下。是的,OPENSSL_INCLUDE_DUR 的正确路径是 openssl/include - Kagemand Andersen
@Tsyvarev,确实会出现这种情况,但使用相对路径会产生相同的错误。 - Kagemand Andersen
CMAKE_FIND_ROOT_PATH_MODE_ 开头的工具链变量有哪些值? - Tsyvarev
显示剩余7条评论
2个回答

9
在Linux上,我没有设置OpenSSL的任何问题。
在Windows上,我按以下说明解决了问题。
尝试删除CMakeCache.txt文件,然后重新执行。缓存Cmake是主要问题。
例如,我执行了cmake . -DOPENSSL_ROOT_DIR=C:\openssl-1.0.2 -DOPENSSL_INCLUDE_DIR=C:\openssl-1.0.2\include -DOPENSSL_CRYPTO_LIBRARY=C:\openssl-1.0.2\crypto,一切都得到了解决。逻辑相同。

enter image description here


1
我也遇到了同样的问题,删除 CMakeCache.txt 文件对我也起作用了。应该把它作为被接受的答案。 - jeffreyveon

2

在MacOs中,安装ton的lite客户端时我遇到了相同的错误(cmake ~/lite-client)。

解决方法如下:我打开了“liteclient-build”目录中的“CMakeCache.txt”文件,找到了这一行

OPENSSL_INCLUDE_DIR:PATH=OPENSSL_INCLUDE_DIR-NOTFOUND

并将其更改为我的openssl位置

OPENSSL_INCLUDE_DIR:PATH=/usr/local/opt/openssl/include

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接