ssl - 无法将 libssl 链接到 libcrypto
问题描述
我创建了一个应用程序,它使用libssl
它显然使用libcrypto
. 我已将这些库保存在用户定义的位置--------------------------------------- -------------------------------------------------- --------------------------------------/path/to/xyz/lib/
我为应用程序编写了一个 CMake,它将库链接如下:
set(GCC_LINK_FLAGS "-L/path/to/xyz/lib -lcurl -lpthread -lcrypto -lssl //other libs")
add_executable(Foo ${APP_SOURCE_FILES})
target_link_libraries(Foo ${GCC_LINK_FLAGS})
CMake 没有给出任何错误并创建了创建可执行文件的Makefile。
-------------------------------------------------- -------------------------------------------------- -----------------------------------------
但是当我运行可执行文件时。它抛出以下错误
./Foo: error while loading shared libraries: libcrypto.so.3: cannot open shared object file: No such file or directory
我检查了 libssl.so 的动态链接如下,发现 libcrypto 没有链接...
[root@localhost build]# ldd /path/to/xyz/lib/libssl.so.3
linux-vdso.so.1 => (0x00007fffa5fa7000)
libcrypto.so.3 => not found
libdl.so.2 => /lib64/libdl.so.2 (0x00007f17ea772000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f17ea556000)
libc.so.6 => /lib64/libc.so.6 (0x00007f17ea193000)
/lib64/ld-linux-x86-64.so.2 (0x0000563b0856f000)
我检查了/path/to/xyz/lib/pkgconfig/libssl.pc
文件,发现这个错误很可疑
prefix=/path/to/xyz/lib/
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
Name: OpenSSL-libssl
Description: Secure Sockets Layer and cryptography libraries
Version: 3.0.0-dev
Requires.private: libcrypto
Libs: -L${libdir} -lssl
Cflags: -I${includedir}
问题
做
什么Requires.private: libcrypto
?
以及如何解决这个错误?
-------------------------------------------------- - - - - - - 编辑 - - - - - - - - - - - - - - - - - - - -------------------------
我已经完成了 cmake 文件中的以下编辑
set(CMAKE_SKIP_BUILD_RPATH FALSE)
set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
set(CMAKE_INSTALL_RPATH "/path/to/xyz/lib")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
add_executable(SpeechToText ${APP_SOURCE_FILES})
target_link_libraries(Foo ${GCC_LINK_FLAGS})
install (TARGETS Foo RUNTIME DESTINATION /path/to/project/directory)
我因此更改而遇到分段错误。
Install the project...
-- Install configuration: ""
-- Installing: /path/to/project/directory/Foo
-- Set runtime path of "/path/to/project/directory/Foo" to "/path/to/xyz/lib"
[root@localhost build]# ../Foo
Segmentation fault (core dumped)
解决方案
推荐阅读
- c++ - 如何让一个变量依赖于类中的其他变量?
- php - 如何根据 PHP 中的最高数量从多个数组中找到数组?
- python - 如何从 pandas.tolist() 中删除最右边的 None?
- javascript - 刷新页面后将类保存到图标
- nginx - flasgger /apidocs 不使用 nginx 反向代理呈现
- scala - 如何在 Spark RDD 中处理带有数组元素的嵌套结构
- php - 文件大小()动态 - PHP
- php - PHP 从 CSV 文件中提取标题行 - 代码解释
- scala - 在 Scala 中使用 Try 进行错误处理的最佳实践
- java - 如何从输入中生成随机值?