«*.so» связанная библиотека не может открыть свой общий объектный файл

#c #cmake

#c #cmake

Вопрос:

Я создаю проект, используя некоторые библиотеки и CMake. Есть два проекта; первый — библиотека, использующая файл «.so», а второй — библиотека и исполняемый файл на основе первого.

Но когда я запускаю исполняемый файл второго проекта, я получаю следующую ошибку:

 my_library: error while loading shared libraries: my_lib.so.0: cannot open shared object file: No such file or directory
  

CMakeLists.txt из FirstProject:

 add_library(my_lib SHARED IMPORTED)
set_property(TARGET my_lib PROPERTY IMPORTED_LOCATION lib/my_lib/my_lib.so)

add_library(my_first_lib SHARED my_first_lib.cpp)
target_link_libraries(my_first_lib my_lib)
  

CMakeLists.txt из SecondProject:

 add_library(my_second_lib my_second_lib.cpp)
target_link_libraries(my_second_lib ${my_first_lib_LIBRARIES})

add_executable(my_second_exe my_second_exe.cpp)
target_link_libraries(my_second_exe my_second_lib)
  

Как правильно связать файл «*.so»?

Комментарии:

1. Они собираются вместе как подпроект? если нет, попробуйте экспортировать путь к библиотеке, который используется вашим первым проектом: export LD_LIBRARY_PATH=»ПУТЬ К ПАПКЕ, СОДЕРЖАЩЕЙ ВАШУ БИБЛИОТЕКУ»

2. Если вместо относительного пути lib/my_lib/my_lib.so вы используете абсолютный путь, находит ли он библиотеку тогда?

3. @UyTrieuViTran Если я добавлю эту переменную, «my_lib.so.0» будет обнаружено, но другие библиотеки будут потеряны. В моем случае я использую ROS lib, поэтому я получаю следующую ошибку «libroscpp.so : не удается открыть общий объектный файл: нет такого файла или каталога»

4. @Someprogrammerdude К сожалению, ваш метод у меня не работает.

5. @kyungpyokim в папке, на которую указывает ваш LD_LIBRARY_PATH (при условии, что вы экспортировали LD_LIBRARY_PATH), попробуйте поместить все ваши зависимости в эту папку (libroscpp.so например).