CMake tidak dapat menemukan pustaka OpenSSL

119

Saya mencoba menginstal perangkat lunak, yang menggunakan cmake untuk menginstal sendiri, ketika saya memberikan di commandlin cmake ..
itu memberi saya kesalahan berikut dalam file ini, CMakeLists.txt -------- line ---> find_package ( DIBUTUHKAN OpenSSL): -

 cmake ..
-- 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)

Berikut adalah bagian dari file CMakeLists.txt, di mana kesalahan datang: ------

#
# 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)

http://www.opensource.apple.com/source/OpenSSL/OpenSSL-7.1/openssl/INSTALL?txt
Sekarang saya telah menginstal Openssl, di sini: ----

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

Saya telah menetapkan .profil saya sebagai: ----

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

Bagaimana cara mengatasi kesalahan ini?

edit: -
Mendapatkan kesalahan ini

/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'
Allan
sumber

Jawaban:

304

Saya memiliki masalah yang sama (openssl) dan ini berfungsi untuk saya di Ubuntu 14.04.1 LTS. Solusinya sama hingga Ubuntu 18.04 (diuji).

sudo apt-get install libssl-dev
Arwen
sumber
20
Ini harus menjadi jawaban yang diterima! Terima kasih atas solusinya!
Mirakurun
1
Bekerja pada Ubuntu 16.04 LTS juga.
Falko
10
Paket ini disebut openssl-develdi Centos 7, jadi Anda harus melakukannyasudo yum install openssl-devel
user2888798
2
Ini tidak berfungsi lagi; tidak setidaknya di Ubuntu 18.04.
Astrid
5
@Astrid Saya dapat membuatnya berfungsi di Ubuntu 18.04
Chau Giang
41

Jika Anda menggunakan Ubuntu, jalankan sudo apt install libssl-dev.

ryancheung.dll
sumber
4
@Astrid bekerja dengan baik untuk saya. Pesan kesalahan apa yang Anda dapatkan?
Bruno Alexandre Rosa
Bekerja untuk saya juga di ubuntu 18.04 @Astrid
Shehan
29

perbaiki di macOS menggunakan

brew install openssl
cmake -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl -DOPENSSL_LIBRARIES=/usr/local/opt/openssl/lib
qin
sumber
1
OPENSSL_LIBRARIESadalah variabel keluaran, bukan masukan. Lihat github.com/Kitware/CMake/blob/…
Simon Warta
21

Silakan instal openssl dari tautan di bawah ini:
https://code.google.com/p/openssl-for-windows/downloads/list
lalu atur variabel di bawah ini:

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
appapurapu
sumber
Bekerja seperti pesona, terima kasih! Saya dapat mengekstrak file zip yang diunduh dari tautan yang Anda sebutkan. Setelah itu saya hanya menambahkan -DOPENSSL_ROOT-DIR = "C: / Path / To / Extracted / Files".
Charlie Vieillard
5
Ini sekarang sudah sangat kuno dan mungkin berbahaya untuk digunakan. Situs web openssl memiliki tautan ke 2 situs yang menyediakan binari. Tampaknya itulah masalah dengan lib terkait keamanan seperti ini. Namun, menyetel nilai seperti itu juga akan berfungsi dengan unduhan biner lainnya.
Terdampar
Bekerja pada Windows dengan-DBUILD_TESTING=OFF -DCMAKE_USE_OPENSSL=ON
Florida
16

Masalah yang sama, dan perbaiki pada centos 6.5 saya menggunakan perintah berikut.

yum install openssl-devel
xavierzhao
sumber
11

sudo apt install libssl-dev bekerja di ubuntu 18.04.

menjembatani
sumber
2
Anda mungkin dapat memberikan detail lebih lanjut tentang solusi yang Anda temukan
XavM
9

Jika Anda dapat menggunakan pkg-config : pkg_search_module()dapat menemukan OpenSSL untuk Anda.

# 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})
ollo
sumber
4

Anda memiliki file FindOpenSSL.cmake di modul cmake (jalur 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)
sekhar
sumber
4

Catatan untuk pengguna Fedora 27: Saya harus menginstal openssl-develpaket agar dapat berjalan dengan cmakesukses.

sudo dnf install openssl-devel

ttarczynski.dll
sumber
4

Hanya untuk bersenang-senang, postingkan jawaban kerja alternatif untuk pertanyaan OP:

cmake -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl/ -DOPENSSL_CRYPTO_LIBRARY=/usr/local/opt/openssl/lib/
user7986267
sumber
1

@ Morwenn benar. Anda perlu mengkonfigurasi DIR openssl. Sebelum itu Anda mungkin perlu memastikan bahwa Anda memilikinya. Anda harus memeriksa apakah Anda memilikinya. jalankan pertama openssl version, kemudian jika Anda memilikinya, Anda dapat win + rmenjalankan openssl dan Anda menang menemukan dir inti karena mungkin tidak bernama opensl di sistem Anda.

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Shihe Zhang
sumber
-1

Inilah yang saya tambahkan di CMakeList.txt(yang berhasil):


# 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()
Bryan Jyh Herng Chong
sumber