Cmake для связи внешней библиотеки с IMPORT_SONAME или IMPORT_LOCATIONC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Cmake для связи внешней библиотеки с IMPORT_SONAME или IMPORT_LOCATION

Сообщение Anonymous »

У меня есть проект C++, связанный с внешней библиотекой.
Библиотека была предоставлена ​​поставщиком и содержит только каталог заголовков .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)
это собирается нормально и ссылки хорошие, однако когда я это делаю abc_lib не отображается в виде

Код: Выделить всё

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)
однако на этот раз он жалуется abc_lib-NOTFOUND
Подводя итог моему вопросу, я хотел бы иметь ссылку, созданную проектом, на локальный общий доступ объект, и в то же время я должен иметь возможность очистить rpath с помощью chrpath или patchelf, чтобы я мог скопировать исполняемый файл на сервер с аналогичной средой, но, возможно, с другим путем к внешней библиотеке, я хотел бы перезаписать путь с использованием LD_LIBRARY_PATH.

Подробнее здесь: https://stackoverflow.com/questions/681 ... t-location
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»