我正在尝试安装一个软件,它使用cmake来安装自己,当我在commandlin cmake上给它时..
它在这个文件中给出了以下错误,CMakeLists.txt -------- line ---> 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)
Run Code Online (Sandbox Code Playgroud)
这是文件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)
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
我把我的.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
Run Code Online (Sandbox Code Playgroud)
如何解决此错误?
编辑: -
获取此错误
/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'
Run Code Online (Sandbox Code Playgroud)
小智 177
我有同样的问题(openssl),这对我在Ubuntu 14.04.1 LTS上工作
sudo apt-get install libssl-dev
Run Code Online (Sandbox Code Playgroud)
Mor*_*enn 61
这是一个常见的误解:CMake不需要环境变量来知道库和包含dir的位置只是CMake变量.
由于CMake无法找到您的OpenSSL lib和include目录,因此在调用它时,您必须手动告诉他们命令行的位置.使用该选项-D
从命令行在CMake中设置常量.您将需要设置常量OPENSSL_ROOT_DIR
,OPENSSL_LIBRARIES
因为它们是触发错误的常量.
cmake -DOPENSSL_ROOT_DIR=/usr/local/ssl -DOPENSSL_LIBRARIES=/usr/local/ssl/lib
Run Code Online (Sandbox Code Playgroud)
qin*_*qin 24
用mac修复它在macOS上
brew install openssl
cmake -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl -DOPENSSL_LIBRARIES=/usr/local/opt/openssl/lib
Run Code Online (Sandbox Code Playgroud)
Shr*_*n40 22
如果您使用的是 macOS,请按照以下步骤操作。
brew upgrade openssl
brew link --force openssl
pkg-config --modversion openssl
#1.1.1l
Run Code Online (Sandbox Code Playgroud)
清除cmakebuild
文件夹并重新运行cmake ..
小智 20
正如其他人提到的,在 Ubuntu 上你应该运行
sudo apt install libssl-dev
Run Code Online (Sandbox Code Playgroud)
但对我来说这还不够,因为虽然安装了构建所需的库,但仍然找不到它们。我还必须安装的是
sudo apt install pkg-config
Run Code Online (Sandbox Code Playgroud)
app*_*apu 18
请从以下链接安装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
Run Code Online (Sandbox Code Playgroud)
如果你可以使用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})
Run Code Online (Sandbox Code Playgroud)
小智 9
同样的问题,并使用以下命令将其修复到我的centos 6.5上.
yum install openssl-devel
Run Code Online (Sandbox Code Playgroud)
只是为了好玩,为 OP 的问题发布了一个替代的工作答案:
cmake -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl/ -DOPENSSL_CRYPTO_LIBRARY=/usr/local/opt/openssl/lib/
Run Code Online (Sandbox Code Playgroud)
以防万一...这对我有用。抱歉,对于 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()
Run Code Online (Sandbox Code Playgroud)
你在 cmake 模块中有 FindOpenSSL.cmake 文件(路径 usr/shared.cmake-3.5/modules)#搜索 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)
Run Code Online (Sandbox Code Playgroud)
小智 5
除了已接受的答案之外,我还发布了一些额外的信息,这些信息可以节省我整整两天的工作和完整的 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 文件列表 libssl-dev
因此,就我而言,解决方案是使用此 cmake 指令:
target_link_libraries(MyExecutable ssl 加密)
归档时间: |
|
查看次数: |
148033 次 |
最近记录: |