CMake ไม่พบไลบรารี OpenSSL


121

ฉันกำลังพยายามติดตั้งซอฟต์แวร์ซึ่งใช้ cmake เพื่อติดตั้งตัวเองเมื่อฉันให้ที่ commandlin cmake ..
มันทำให้ฉันมีข้อผิดพลาดต่อไปนี้ในไฟล์นี้ CMakeLists.txt -------- บรรทัด ---> find_package ( ต้องการ 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)

นี่คือส่วนหนึ่งของไฟล์ 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)

http://www.opensource.apple.com/source/OpenSSL/OpenSSL-7.1/openssl/INSTALL?txt
ตอนนี้ฉันได้ติดตั้ง 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'

คำตอบ:


314

ฉันมีปัญหาเดียวกัน (openssl) และสิ่งนี้ใช้ได้กับฉันบน Ubuntu 14.04.1 LTS วิธีแก้ปัญหานั้นเหมือนกับ Ubuntu 18.04 (ทดสอบแล้ว)

sudo apt-get install libssl-dev

20
คำตอบนี้ควรได้รับการยอมรับ! ขอบคุณสำหรับวิธีแก้ปัญหา!
Mirakurun

1
ทำงานบน Ubuntu 16.04 LTS เช่นกัน
Falko

12
แพคเกจนี้เรียกว่าopenssl-develCentos 7 ดังนั้นคุณจะทำsudo yum install openssl-devel
user2888798

2
สิ่งนี้ใช้ไม่ได้อีกต่อไป ไม่ได้ใช้ Ubuntu 18.04 เป็นอย่างน้อย
Astrid

5
@Astrid ฉันสามารถทำให้มันใช้งานได้ใน Ubuntu 18.04
Chau Giang

43

sudo apt install libssl-devหากคุณกำลังใช้อูบุนตูวิ่ง


4
@Astrid มันใช้งานได้ดีสำหรับฉัน คุณได้รับข้อความแสดงข้อผิดพลาดอะไร
Bruno Alexandre Rosa

ทำงานให้ฉันด้วยบน Ubuntu 18.04 @Astrid
Shehan


21

โปรดติดตั้ง 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

ใช้งานได้อย่างมีเสน่ห์ขอบคุณ! ฉันสามารถแตกไฟล์ zip ที่ดาวน์โหลดมาจากลิงค์ที่คุณกล่าวถึง หลังจากนั้นฉันก็เพิ่ม -DOPENSSL_ROOT-DIR = "C: / Path / To / Extracted / Files"
Charlie Vieillard

5
ขณะนี้ล้าสมัยมากและอาจเป็นอันตรายต่อการใช้งาน เว็บไซต์ openssl มีลิงก์ไปยัง 2 ไซต์ที่ให้บริการไบนารี ดูเหมือนว่าจะเป็นปัญหากับ libs ที่เกี่ยวข้องกับความปลอดภัยเช่นนี้ อย่างไรก็ตามการตั้งค่าเช่นนั้นควรใช้ได้กับการดาวน์โหลดไบนารีอื่น ๆ ด้วย
เกยตื้น

ทำงานบน Windows ด้วย-DBUILD_TESTING=OFF -DCMAKE_USE_OPENSSL=ON
Florida


11

sudo apt install libssl-dev ทำงานบนอูบุนตู 18.04


2
คุณอาจให้รายละเอียดเพิ่มเติมเกี่ยวกับโซลูชันที่คุณพบได้
XavM

9

หากคุณสามารถใช้pkg-config : pkg_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})

4

คุณกำลังมีไฟล์ FindOpenSSL.cmake ในโมดูล cmake (พา ธ usr / shared.cmake-3.5 / โมดูล) # ค้นหา 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)

4

หมายเหตุสำหรับผู้ใช้ Fedora 27: ฉันต้องติดตั้งopenssl-develแพ็คเกจเพื่อเรียกใช้cmake.

sudo dnf install openssl-devel


4

เพื่อความสนุกสนานโพสต์คำตอบทางเลือกในการทำงานสำหรับคำถามของ OP:

cmake -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl/ -DOPENSSL_CRYPTO_LIBRARY=/usr/local/opt/openssl/lib/

1

@ มอร์เวนน์พูดถูก คุณต้องกำหนดค่า openssl DIR ก่อนหน้านั้นคุณอาจต้องแน่ใจว่าคุณมี คุณควรตรวจสอบว่าคุณมีหรือไม่ เรียกใช้ครั้งแรกopenssl versionจากนั้นหากคุณมีคุณสามารถwin + rเรียกใช้openssl และคุณชนะให้ค้นหาแกนหลักเนื่องจากอาจไม่มีชื่อเป็น openssl ในระบบของคุณ

ป้อนคำอธิบายภาพที่นี่

ป้อนคำอธิบายภาพที่นี่


-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()
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.