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

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

21.05.2020, 16:57. Показов 17089. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru