#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 например).