190

我正在尝试安装一个使用 cmake 自行安装的软件。当我cmake ..在命令行上运行时,它在行中显示以下CMakeLists.txt错误find_package(OpenSSL REQUIRED)

-- Could NOT find Git (missing:  GIT_EXECUTABLE) 
ZLib include dirs: /usr/include
ZLib libraries: /usr/lib/arm-linux-gnueabihf/libz.so
Compiling with SSL support
CMake Error at /usr/local/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:97 (message):
  Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the
  system variable OPENSSL_ROOT_DIR (missing: OPENSSL_LIBRARIES
  OPENSSL_INCLUDE_DIR)
Call Stack (most recent call first):
  /usr/local/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:291 (_FPHSA_FAILURE_MESSAGE)
  /usr/local/share/cmake-2.8/Modules/FindOpenSSL.cmake:313 (find_package_handle_standard_args)
  CMakeLists.txt:436 (find_package)

这是CMakeLists.txt错误来自的文件部分:

#
# OpenSSL
#
if (WITH_SSL)
    message("Compiling with SSL support")

    if (USE_CYASSL)
        # Use CyaSSL as OpenSSL replacement.
        # TODO: Add a find_package command for this also.
        message("CyaSSL include dir: ${CYASSL_INCLUDE_DIRS}")
        message("CyaSSL libraries: ${CYASSL_LIB}")

        # Additional to the root directory we need to include
        # the cyassl/ subdirectory which contains the OpenSSL
        # compatability layer headers.
        foreach(inc ${CYASSL_INCLUDE_DIRS})
            include_directories(${inc} ${inc}/cyassl)
        endforeach()

        list(APPEND LIB_LIST ${CYASSL_LIB})
    else()
        # TODO: Add support for STATIC also.
        find_package(OpenSSL REQUIRED)

        message("OpenSSL include dir: ${OPENSSL_INCLUDE_DIR}")
        message("OpenSSL libraries: ${OPENSSL_LIBRARIES}")

        include_directories(${OPENSSL_INCLUDE_DIR})
        list(APPEND LIB_LIST ${OPENSSL_LIBRARIES})
    endif()
endif(WITH_SSL)

我在这里安装了 OpenSSL:

ssl header is here   -- > /usr/local/ssl/include/openssl/
ssl library is here  -- > /usr/local/ssl/lib/libssl.a
                          /usr/local/ssl/lib/libcrypto.a
openssl is here      -- > /usr/local/ssl/bin

我在我的.profile

export LD_LIBRARY_PATH=/usr/local/ssl/include/openssl:/usr/lib:/usr/local/lib:/usr/lib/pkgconfig:/usr/local/include/wx-2.8/wx:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/usr/lib/pkgconfig
export OPENSSL_ROOT_DIR=/usr/local/ssl
export OPENSSL_LIBRARIES=/usr/local/ssl/lib/

PATH = /usr/local/ssl/bin:$PATH

如何解决此错误?

编辑:

现在我收到此错误

/usr/local/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_globallookup':
dso_dlfcn.c:(.text+0x10): undefined reference to `dlopen'
dso_dlfcn.c:(.text+0x24): undefined reference to `dlsym'
dso_dlfcn.c:(.text+0x30): undefined reference to `dlclose'
4

18 回答 18

502

我遇到了同样的问题(openssl),这在 Ubuntu 14.04.1 LTS 上对我有用。该解决方案与 Ubuntu 18.04(已测试)相同。

sudo apt-get install libssl-dev
于 2014-12-18T16:20:35.270 回答
57

在 macOS 上使用

brew install openssl
cmake -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl -DOPENSSL_LIBRARIES=/usr/local/opt/openssl/lib
于 2016-12-29T07:37:53.733 回答
52

如果您使用的是 Ubuntu,请运行sudo apt install libssl-dev.

于 2018-03-14T07:28:55.883 回答
27

同样的问题,并使用以下命令在我的 centos 6.5 上修复了它。

yum install openssl-devel
于 2014-12-01T06:55:14.537 回答
23

请从以下链接安装 openssl:
https
://code.google.com/p/openssl-for-windows/downloads/list 然后设置以下变量:

OPENSSL_ROOT_DIR=D:/softwares/visualStudio/openssl-0.9.8k_WIN32
OPENSSL_INCLUDE_DIR=D:/softwares/visualStudio/openssl-0.9.8k_WIN32/include
OPENSSL_LIBRARIES=D:/softwares/visualStudio/openssl-0.9.8k_WIN32/lib
于 2014-12-16T14:00:19.793 回答
13

sudo apt install libssl-dev适用于 ubuntu 18.04。

于 2020-01-03T17:09:13.390 回答
10

如果您可以使用pkg-configpkg_search_module()可以为您找到 OpenSSL。

# Search OpenSSL
find_package(PkgConfig REQUIRED)
pkg_search_module(OPENSSL REQUIRED openssl)

if( OPENSSL_FOUND )
    include_directories(${OPENSSL_INCLUDE_DIRS})
    message(STATUS "Using OpenSSL ${OPENSSL_VERSION}")
else()
    # Error; with REQUIRED, pkg_search_module() will throw an error by it's own
endif()

target_link_libraries(${YOUR_TARGET_HERE} ${OPENSSL_LIBRARIES})
于 2014-10-23T18:06:07.273 回答
7

只是为了好玩,我会为 OP 的问题发布一个替代的工作答案:

cmake -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl/ -DOPENSSL_CRYPTO_LIBRARY=/usr/local/opt/openssl/lib/
于 2017-12-26T21:59:20.097 回答
6

以防万一……这对我有用。抱歉,OpenSSL 的特定版本,但可能是可取的。

# On macOS, search Homebrew for keg-only versions of OpenSSL
# equivalent of # -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl/ -DOPENSSL_CRYPTO_LIBRARY=/usr/local/opt/openssl/lib/
if (CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin")
    execute_process(
        COMMAND brew --prefix OpenSSL 
        RESULT_VARIABLE BREW_OPENSSL
        OUTPUT_VARIABLE BREW_OPENSSL_PREFIX
        OUTPUT_STRIP_TRAILING_WHITESPACE
    )
    if (BREW_OPENSSL EQUAL 0 AND EXISTS "${BREW_OPENSSL_PREFIX}")
        message(STATUS "Found OpenSSL keg installed by Homebrew at ${BREW_OPENSSL_PREFIX}")
        set(OPENSSL_ROOT_DIR "${BREW_OPENSSL_PREFIX}/")
        set(OPENSSL_INCLUDE_DIR "${BREW_OPENSSL_PREFIX}/include")
        set(OPENSSL_LIBRARIES "${BREW_OPENSSL_PREFIX}/lib")
        set(OPENSSL_CRYPTO_LIBRARY "${BREW_OPENSSL_PREFIX}/lib/libcrypto.dylib")
    endif()
endif()

...

find_package(OpenSSL REQUIRED)
if (OPENSSL_FOUND)
  # Add the include directories for compiling
  target_include_directories(${TARGET_SERVER} PUBLIC ${OPENSSL_INCLUDE_DIR})
  # Add the static lib for linking
  target_link_libraries(${TARGET_SERVER} OpenSSL::SSL OpenSSL::Crypto)
  message(STATUS "Found OpenSSL ${OPENSSL_VERSION}")
else()
  message(STATUS "OpenSSL Not Found")
endif()
于 2020-11-16T07:38:57.113 回答
6

您在 cmake 模块中有 FindOpenSSL.cmake 文件(路径 usr/shared.cmake-3.5/modules)# Search OpenSSL

 find_package(OpenSSL REQUIRED) 
if( OpenSSL_FOUND )
    include_directories(${OPENSSL_INCLUDE_DIRS})
    link_directories(${OPENSSL_LIBRARIES})
    message(STATUS "Using OpenSSL ${OPENSSL_VERSION}")

target_link_libraries(project_name /path/of/libssl.so /path/of/libcrypto.so)
于 2017-06-30T12:30:07.263 回答
5

Fedora 27 用户注意:我必须安装openssl-devel软件包才能cmake成功运行。

sudo dnf install openssl-devel

于 2017-12-10T21:36:14.667 回答
5

正如其他人所提到的,在 Ubuntu 上你应该运行

     sudo apt install libssl-dev

但对我来说这还不够,因为虽然安装了构建所需的库,但仍然找不到。我还必须安装的是

     sudo apt install pkg-config
于 2021-03-31T07:52:35.640 回答
3

如果您使用的是 macOS,请按照以下步骤操作。

brew upgrade openssl
brew link --force openssl
pkg-config --modversion openssl
#1.1.1l

清除 cmakebuild文件夹并重新运行cmake ..

于 2021-09-21T11:54:34.943 回答
1

这是我在CMakeList.txt(有效)中添加的内容:


# https://cmake.org/cmake/help/latest/command/find_package.html
# in the above link, it states:
# "In Module mode, CMake searches for a file called Find<PackageName>.cmake. 
#  The file is first searched in the CMAKE_MODULE_PATH, then among the Find 
#  Modules provided by the CMake installation. If the file is found, it is
#  read and processed by CMake. It is responsible for finding the package,
#  checking the version, and producing any needed messages. Some find-modules
#  provide limited or no support for versioning; check the module documentation."
#
# FindOpenSSL.cmake can be found in path/to/cmake/Modules
#
# https://cmake.org/cmake/help/latest/module/FindOpenSSL.html
#

find_package(OpenSSL REQUIRED)
if (OPENSSL_FOUND)
  # Add the include directories for compiling
  target_include_directories(${PROJECT_NAME} PUBLIC ${OPENSSL_INCLUDE_DIR})

  # Add the static lib for linking
  target_link_libraries(${PROJECT_NAME} OpenSSL::SSL OpenSSL::Crypto)

  message(STATUS "Found OpenSSL ${OPENSSL_VERSION}")

else()

  message(STATUS "OpenSSL Not Found")

endif()
于 2020-07-24T14:55:15.007 回答
1

@Morwenn 是对的。您需要配置 openssl DIR。在此之前,您可能需要确保拥有它。你应该检查你是否拥有它。首先运行openssl version,然后如果你有它,你可以win + r运行openssl 并且你会找到核心目录,因为它在你的系统中可能没有命名为 openssl。

在此处输入图像描述

在此处输入图像描述

于 2017-04-20T03:37:19.450 回答
1

在 WSL 上运行后仍然出现错误sudo apt install libssl-dev

我必须运行whereis openssl,然后更新注释掉的行CMakeCache.txt

#OPENSSL_CRYPTO_LIBRARY:FILEPATH=OPENSSL_CRYPTO_LIBRARY-NOTFOUND
OPENSSL_CRYPTO_LIBRARY:FILEPATH=/usr/bin/openssl

#OPENSSL_INCLUDE_DIR:PATH=OPENSSL_INCLUDE_DIR-NOTFOUND
OPENSSL_INCLUDE_DIR:PATH=/usr/include/openssl
于 2021-10-25T09:29:04.460 回答
0

答案实际上取决于您的系统状态和您正在使用的程序cmake。根据您遇到的第二个错误,您可能需要一个openssl当前未安装在系统上的额外软件包。aptitude search您可以使用该命令搜索包。我建议搜索“ssl”而不是“openssl”,因为包有时不包含“open”一词。

检查要安装哪些软件包的另一件事是查找您正在安装的产品的手册或文档是否包含有关要安装哪些软件包的信息。

与其他帖子评论一样,其中一个包是 libssl-dev,但您的程序可能还需要一些其他包。

于 2021-03-09T19:00:49.353 回答
0

除了接受的答案之外,我还发布了一些额外的信息,这些信息可以节省我两天的工作时间和完整的 CMake 撕裂。我的机器运行 Ubuntu 20.04

按照建议安装 libssl-dev 包括两个库:libssl 和 libcrypto。我的 cmake 项目中的 find_package 指令正在消除我项目中的引用错误,但它仍然找不到库。那是因为周围所有公认的答案都告诉您使用这些行:

find_package(需要 OpenSSL)

target_link_libraries(MyExecutable OpenSSL Crypto)

Cmake 将查找名称为 libOpenSSL 和 libCrypto 的库。两者都因大写而失败,并且 libopenssl 不存在,因为该文件实际上只是命名为 libssl。实际上,使用以下命令检查 libssl-dev 包的内容:

apt-file 列表 libssl-dev

因此,就我而言,解决方案是改用这个 cmake 指令:

target_link_libraries(MyExecutable ssl crypto )

于 2022-01-14T15:07:17.090 回答