সিএমকে ওপেনএসএসএল লাইব্রেরিটি খুঁজে পাচ্ছে না


130

আমি একটি সফ্টওয়্যার ইনস্টল করার চেষ্টা করছি, যা নিজেকে ইনস্টল করতে cmake ব্যবহার করে, যখন আমি কমান্ডলিন cmake এ দিই ..
এটি আমাকে এই ফাইলটিতে নিম্নলিখিত ত্রুটি দেয়, সিএমকেলিস্ট.টেক্সট -------- লাইন ---> সন্ধান_প্যাকেজ ( ওপেনএসএল প্রয়োজনীয়): -

 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)

এখানে সিএমকেলিস্ট.টেক্সট ফাইলের অংশ রয়েছে, যেখানে ত্রুটি চলেছে: ------

#
# 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
এখন আমি ওপেনএসএল ইনস্টল করেছি, এখানে: ----

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

আমি আমার। প্রোফাইলটি সেট করেছি: ----

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'

উত্তর:


339

আমার একই সমস্যা ছিল (ওপেনসেল) এবং এটি আমার জন্য উবুন্টু 14.04.1 এলটিএসে কাজ করেছিল। সমাধানটি উবুন্টু 18.04 (পরীক্ষিত) পর্যন্ত সমান।

sudo apt-get install libssl-dev

22
এই উত্তর গ্রহণ করা উচিত! সমাধানের জন্য ধন্যবাদ!
মিরাকুরুন

4
পাশাপাশি উবুন্টু 16.04 এলটিএসে কাজ করে।
ফালকো

12
এই প্যাকেজটি openssl-develsudo yum install openssl-devel
সেন্টোস

4
এটি আর কাজ করে না; অন্তত 18.04 এ উবুন্টুতে নেই।
অ্যাস্ট্রিড

8
@ অস্ট্রিড আমি উবুন্টু 18.04 এ এটির কাজ করতে সক্ষম হয়েছি
চৌ জিয়াং

44

আপনি যদি উবুন্টু ব্যবহার করেন তবে চালান sudo apt install libssl-dev


4
@ অস্ট্রিড এটি আমার পক্ষে ভাল কাজ করেছে। আপনি কোন ত্রুটি বার্তা পাবেন?
ব্রুনো আলেকজান্দার রোজা

উবুন্টুতেও আমার জন্য কাজ করেছেন 18.04 @ অস্ট্রিডে
শেহান

33

ম্যাকোস ব্যবহার করে এটি স্থির করুন

brew install openssl
cmake -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl -DOPENSSL_LIBRARIES=/usr/local/opt/openssl/lib

4
OPENSSL_LIBRARIESএকটি আউটপুট পরিবর্তনশীল, একটি ইনপুট নয়। Github.com/Kitware/CMake/blob/…
সাইমন

21

নীচের লিঙ্কটি থেকে ওপেনসেলটি ইনস্টল করুন:
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

একটি মোহন মত কাজ করে, ধন্যবাদ! আপনি উল্লিখিত লিঙ্কটি আমি জিপ ফাইল ডাউনলোড করা ফর্মটি বের করতে সক্ষম হয়েছি। এর পরে আমি সবেমাত্র -DOPENSSL_ROOT-DIR = "সি: / পাথ / টু / এক্সট্র্যাক্ট / ফাইলগুলি" যুক্ত করেছি।
চার্লি ভাইলার্ড

6
এটি এখন খুব পুরানো এবং সম্ভবত ব্যবহার করা বিপজ্জনক। ওপেনসেল ওয়েবসাইটে বাইনারি সরবরাহকারী 2 টি সাইটের লিঙ্ক রয়েছে। এটির মতো সুরক্ষা সম্পর্কিত libs এ সমস্যা বলে মনে হচ্ছে। তবে এর মতো মানগুলি সেট করা অন্যান্য বাইনারি ডাউনলোডগুলির সাথেও কাজ করা উচিত।
beached

উইন্ডোজ নিয়ে কাজ করেছেন-DBUILD_TESTING=OFF -DCMAKE_USE_OPENSSL=ON
ফ্লোরিডা

19

একই সমস্যা, এবং নীচের কমান্ডটি ব্যবহার করে আমার সেন্টোস 6.5 এ এটি ঠিক করেছেন।

yum install openssl-devel

11

sudo apt install libssl-dev উবুন্টু 18.04 এ কাজ করে।


4
আপনি যে সমাধানটি পেয়েছেন সে সম্পর্কে আপনি সম্ভবত আরও বিশদ সরবরাহ করতে পারেন
জাভএম

10

আপনি যদি pkg-config ব্যবহার করতে পারেন : pkg_search_module()আপনার জন্য ওপেনএসএসএল খুঁজে পেতে পারেন।

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

5

ফেডোরার 27 ব্যবহারকারীর জন্য নোট: সফলভাবে openssl-develচালানোর জন্য আমাকে প্যাকেজ ইনস্টল করতে হয়েছিল cmake

sudo dnf install openssl-devel


4

আপনার ক্যামক মডিউলে FindOpenSSL.cmake ফাইলটি রয়েছে (পাথ usr / shared.cmake-3.5 / মডিউল) # অনুসন্ধান ওপেনএসএসএল

 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

কেবল মজাদার অসুস্থতার জন্য অপির প্রশ্নের বিকল্প বিকল্প উত্তর পোস্ট করুন:

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

আমি মনে করি OPENSSL_CRYPTO_LIBRARY এর পরিবর্তে /usr/local/opt/openssl/lib/libcrypto.dylib নির্দেশ করা উচিত।
আদম হুনিয়াডি

1

@ মোরওয়েন ঠিক আছে। আপনাকে ওপেনসেল ডিআইআর কনফিগার করতে হবে। তার আগে আপনার এটি নিশ্চিত করার প্রয়োজন হতে পারে। আপনার এটি আছে কিনা তা পরীক্ষা করা উচিত। প্রথমে রান করুন openssl version, তারপরে আপনার যদি এটি থাকে তবে আপনি win + rচালাতে পারেন 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.