Я создал приложение, в котором оно использует 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)