Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/84: Рейтинг темы: голосов - 84, средняя оценка - 4.88
9 / 2 / 0
Регистрация: 18.09.2013
Сообщений: 98

Cmake: исполняемый файл ищет *.so по другому пути

21.05.2020, 16:57. Показов 16688. Ответов 26

Студворк — интернет-сервис помощи студентам
Здравствуйте, есть вот такая конфигурация проекта:

proj/main.c
proj/myinc.h

Программа использует внешние библиотеки, добавленные мною вручную:

proj/include/inc1.in
proj/include/inc2.in

и

proj/lib/lib1.so
proj/lib/lib2.so.1

Подключаю их к проекту следующим образом:

add_library(lib1 SHARED IMPORTED)
add_library(lib2 SHARED IMPORTED)
set_property(TARGET lib1 PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/lib/lib1.so")
set_property(TARGET lib2 PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/lib/lib2.so.1")

Линкую:

target_link_libraries(${PROJECT_NAME} lib1 lib2)

Так же мне их надо добавить потом в `/usr/bin`:

install(FILES ${PROJECT_SOURCE_DIR}/lib/lib1.so DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)
install(FILES ${PROJECT_SOURCE_DIR}/lib/lib2.so.1 DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)

Затем собираю проект: `cmake . && make && sudo make install`
И полностью удаляю папку proj с исходниками

Однако, когда я запускаю исполняемый файл, он почему то ищет эти либы в `proj/lib/`, а не в `/usr/lib`:

$ /usr/bin/app
app: error while loading shared libraries: lib/lib1.so: cannot open shared object file: No such file or directory


Вопрос: как заставить собранное приложение искать либы в /usr/lib?
Спасибо.
P.S. как то это видимо решается через RPATH, но пока что успехов никаких
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.05.2020, 16:57
Ответы с готовыми решениями:

Новичок ищет пути создания бэкапа
пожалуйста, помогите создать бекап в MySQL-е и раскрыть этот бекап в SQL Server-е. Спасибо за внимание.

Перенаправить результат сценария по другому пути
Здравствуйте, сценарий просто создает файл. Я хочу при вызове файла указать сразу нужный путь, где должен быть создан файл. $ sh...

CX_freeze ищет пути к python после сборки
Запускаю собранный с помощью CX_freeze exe. На компьютере, где собирал все запускается нормально. На на другом компьютере cx_freeze...

26
9 / 2 / 0
Регистрация: 18.09.2013
Сообщений: 98
21.05.2020, 19:51  [ТС]
Студворк — интернет-сервис помощи студентам
Vourhey, вот его выхлоп:
Кликните здесь для просмотра всего текста
/usr/bin/cmake -E cmake_link_script CMakeFiles/daq_module_server.dir/link.txt --verbose=1
/usr/bin/cc CMakeFiles/daq_module_server.dir/daq_card_callback.c.o CMakeFiles/daq_module_server.dir/daq_module_logger.c.o CMakeFiles/daq_module_server.dir/daq_module_protocol.c.o CMakeFiles/daq_module_server.dir/daq_card_operations.c.o CMakeFiles/daq_module_server.dir/daq_emulator_operations.c.o CMakeFiles/daq_module_server.dir/main.c.o -o build/daq_module_server -Wl,-rpath,/home/ermvad/signal-processing/data-acquisition-device/or-data-acquisition-device/lib: -luv lib/libpci_dask2k64.so.1 lib/libiniparser.so.1
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
22.05.2020, 15:05
Че-то, rpath не пробрасывается у тебя
0
9 / 2 / 0
Регистрация: 18.09.2013
Сообщений: 98
22.05.2020, 15:16  [ТС]
Vourhey, у ldd выхлоп такой:
Кликните здесь для просмотра всего текста
linux-vdso.so.1 (0x00007ffc2c9d0000)
libuv.so.1 => /lib/x86_64-linux-gnu/libuv.so.1 (0x00007f25ad7d2000)
lib/libpci_dask2k64.so => not found
libiniparser.so.1 => /usr/lib/libiniparser.so.1 (0x00007f25ad7cc000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f25ad5da000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f25ad5b7000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f25ad5b1000)
/lib64/ld-linux-x86-64.so.2 (0x00007f25ad81a000)

Как бы libiniparser линкуется как надо, а вот libpci_dask2k64 неа. При том что обе существуют в /usr/lib и в /lib:
Кликните здесь для просмотра всего текста
libpci_dask2k64.so (libc6,x86-64) => /lib/libpci_dask2k64.so
libiniparser.so.1 (libc6,x86-64) => /lib/libiniparser.so.1


При одинаковых командах линковки на этапе компановки и этапе запуска, одна либа видна, а другая нет. Права доступа у обоих 777. Может быть проблема тупо в либе
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
22.05.2020, 15:18
запусти команду cc ручками заменив rpath, посмотри, как будет работать.
0
9 / 2 / 0
Регистрация: 18.09.2013
Сообщений: 98
22.05.2020, 17:14  [ТС]
Vourhey,
Кликните здесь для просмотра всего текста
ermvad@huanan-intel-linux:~/proj$ sudo /usr/bin/cc daq_card_callback.c daq_module_logger.c daq_module_protocol.c daq_card_operations.c daq_emulator_operations.c main.c -o build/daq_module_server -Wl,-rpath,/usr/lib: -luv lib/libpci_dask2k64.so lib/libiniparser.so.1

ermvad@huanan-intel-linux:~/proj$ cd build
ermvad@huanan-intel-linux:~/proj/build$ objdump -x daq_module_server| grep PATH
RUNPATH /usr/lib:
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
22.05.2020, 17:26
Во, теперь выглядит норм. И как, все равно не в ду-ду?
0
9 / 2 / 0
Регистрация: 18.09.2013
Сообщений: 98
22.05.2020, 18:11  [ТС]
Vourhey, Не ду-ду. Одну либу - iniparser видит без проблем, а вот вторую никак. Хотя либы импортируются и линкуются одними и теми же командами (только разыне пути). Пока что сделал копирование .so в /usr/lib через file(INSTALL libs DESTINATION /usr/lib). Такие вот дела
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.05.2020, 18:11
Помогаю со студенческими работами здесь

Открыть исполняемый файл, если запущен конкретный файл
Доброго времени суток! Вот такая проблемка мучает: мне нужно решить следующую задачу: открыть исполняемый файл,если запущен конкретный...

Как включить txt файл в исполняемый файл?
Подскажите плиз как решить проблему, суть такова: в txt файле имеется таблица (разделитель - знак табуляции). Требуется зашить её внутрь...

Включить в исполняемый файл бинарный файл
Собственно задача такая - есть некая программа которая пишет BIN файл во внешнее устройство. Но пользователи иногда путают файлы при выборе...

C# как по сетевом пути файл раздавать в каталоге другом пути
C# как по сетевом пути файл раздавать в каталоге другом пути например foto.jpg находиться по сетевом пути одного ПК ...

Исполняемый файл
Всем привет. Начал изучать Common Lisp совсем недавно. Знаю, что вопрос уже много раз поднимался, но в конечном итоге хотелось бы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru