LINUX.ORG.RU

Поиск нужных зависимостей для запуска ELF файла

 , ,


0

2

Не получается запустить бинарный файл скомпилированный из qt.
Пробовал запускать через интерпретатор ld-linux-x86-64.so.2 получил - cannot open shared object file. Подскажите, как можно узнать, какие библиотеки и зависимости нужны для запуска файла?



Последнее исправление: a1batross (всего исправлений: 1)

chmod +x binary.elf, но это дикость, обычно такое не нужно.

как можно узнать, какие библиотеки и зависимости нужны для запуска файла?

ldd

xDShot ★★★★★
()
Ответ на: комментарий от xDShot

chmod +x binary.elf, но это дикость, обычно такое не нужно.

не запускает так. у меня файл без разширения, небольшая программа, которую нужно протестировать

ldd

как теперь понять, какие библиотеки установлены у меня, а какие нет?

makset199
() автор топика
Ответ на: комментарий от makset199

как теперь понять, какие библиотеки установлены у меня, а какие нет?

(not found) значит не установлена

xDShot ★★★★★
()

Скорее всего надо пересобирать приложение, вангую версии библиотек не совпадают.

Silerus ★★★★
()
Ответ на: комментарий от Silerus

Скорее всего надо пересобирать приложение, вангую версии библиотек не совпадают.

нет такой возможности, я тестирую это приложение, и оно точно работает.

makset199
() автор топика
Ответ на: комментарий от makset199

нету такого, все установлены. из-за чего еще может не запускаться?

Может она через dlopen грузит зависимости и проверяет их наличие.

anonymous
()
Ответ на: комментарий от makset199

проблема не в исправности приложения, а в том что на вашей машине и машине сборки разные версии библиотек (эта отвечает за загрузку/выгрузку динамических библиотек), потому даже если вы начнете подсовывать библиотеки с компа, на котором собиралось приложение, скорее всего ничего путного не выйдет. Выхода три:

  • установить виртуалку с точно такой же системой как на машине сборки.
  • пересобрать приложение из исходников на вашей
  • пересобрать приложение в режиме статической линковки
Silerus ★★★★
()
Последнее исправление: Silerus (всего исправлений: 1)
Ответ на: комментарий от anonymous

Может она через dlopen грузит зависимости и проверяет их наличие.

можешь подсказать, как я могу это проверить? если честно я полный 0 в линуксе

makset199
() автор топика
Ответ на: комментарий от makset199

Тестирую на тех системах, где должно работать. Если нет – заводи багу разработчикам.

kardapoltsev ★★★★★
()

Собрать не только бинарь, но и опакетить его, указав в зависимостях нужные библиотеки и их версии.

zemidius
()

Хммм...

Не получается запустить бинарный файл скомпилированный из qt.

Для начала попробуйте chmod +x you_file. Вы точно знаете где лежит этот самый you_file? Можете ещё заодно глянуть что за файл через file you_file, а то может оказаться что с самим по себе запускаемым файлом какой-нибудь косяк, типа он для другой архитектуры изначально собран.

Проверить какие библиотеки нужны можно:

Не запуская программу:

  • ldd you_file Это наиболее прямой путь.
  • nm you_file Это более извилистый путь. Показываются символы (имена функций) в библиотеках.

Запуская программу:

  • ltrace you_file Это позволяет перехватить библиотечные вызовы (какая библиотека и в какой момент вызывается).
  • strace you_file Это более извилистый путь, т.к. перехватывает по большей части системные вызовы (сисколлы) к ядру Linux.

P.S. ptrace, dtrace, dtruss не обсуждаем, т.к. это сравнительно редкие на практике «звери».

Moisha_Liberman ★★
()
Последнее исправление: Moisha_Liberman (всего исправлений: 2)
Ответ на: комментарий от makset199

как я могу это проверить?

Тупо в лоб, запускаешь в терминале, программа сообщает, нет libxxx.so, добавляешь. Запускаешь….

Реальная история. Много лет пользовался mplayer, даже забыл уже, где я его взял, таскал из системы в систему. Был он 32битный. Решил запустить его в 64битной системе. Чисто в академических целях так и делал. Запускаю, читаю на что жалуется, добавляю, пишу враппер. Запускаю… Пришлось добавить порядка двухсот библиотек. Mplayer заработал. Для GUI-версии понадобилось к тому списку добавить еще пару десятков. Вот сейчас пишу, а он мне поет.

andytux ★★★★★
()
Ответ на: комментарий от Silerus

проблема не в исправности приложения, а в том что на вашей машине и машине сборки разные версии библиотек (эта отвечает за загрузку/выгрузку динамических библиотек), потому даже если вы начнете подсовывать библиотеки с компа, на котором собиралось приложение, скорее всего ничего путного не выйдет. Выхода три:

установить виртуалку с точно такой же системой как на машине сборки. пересобрать приложение из исходников на вашей пересобрать приложение в режиме статической линковки

Спасибо за совет! Но проблема оказалась не в этом, не совпадали версии qt, у меня стояла 5, нужна была 5.9 и выше. на 5.9 заработало

makset199
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.