Библиотека была предоставлена поставщиком и содержит только каталог заголовков .h и общий объектный файл «libabc.so».в CMakeLists моего проекта у меня есть объект obj (который я построил в bar.so), который использует внешнюю библиотеку.
при создании окончательного исполняемого файла я попробовал несколько способов сделать это.
Код: Выделить всё
add_library(bar STATIC /some/source/file/bar.cpp)
add_library(abc_lib SHARED IMPORTED)
set_property(TARGET abc_lib PROPERTY IMPORTED_LOCATION /path/to/external/lib/libabc.so)
add_executable(foo /some/file/to/main.cpp)
target_link_libraries(foo bar abc_lib)
Код: Выделить всё
ldd fooКод: Выделить всё
abc.so => /path/to/external/lib/libabc.soКод: Выделить всё
/path/to/external/lib/libabc.soНо когда я делаю chrpath -d foo или patchelf --remove -rpath fooисполняемый файл по-прежнему содержит путь и не будет использовать тот, который я указал в LD_LIBRARY_PATH
поэтому я попробовал наоборот
Код: Выделить всё
add_library(bar STATIC /some/source/file/bar.cpp)
add_library(abc_lib SHARED IMPORTED)
set_property(TARGE abd_lib PROPERTY IMPORTED_SONAME abc)
link_libraries(/path/to/external/lib)
add_executable(foo /some/file/to/main.cpp)
target_link_libraries(foo bar abc_lib)
Подводя итог моему вопросу, я хотел бы иметь ссылку, созданную проектом, на локальный общий доступ объект, и в то же время я должен иметь возможность очистить rpath с помощью chrpath или patchelf, чтобы я мог скопировать исполняемый файл на сервер с аналогичной средой, но, возможно, с другим путем к внешней библиотеке, я хотел бы перезаписать путь с использованием LD_LIBRARY_PATH.
Подробнее здесь: https://stackoverflow.com/questions/681 ... t-location
Мобильная версия