Не удается открыть файл общих объектов: нет такого файла или каталога; Запуск или отладка в Eclipse

На Ubuntu у меня есть приложение C++ в Eclipse. Приложение компилируется отлично, и я могу запустить приложение из командной строки.

Но когда я пытаюсь отладить его или запустить с помощью Eclipse, ошибка:

"Cannot open shared object file: No such file or directory" не выбрасывается в общей библиотеке.

Я установил LD_LIBRARY_PATH в моем файле bashrc, а также установил переменную среды LD_LIBRARY_PATH в настройках конфигурации запуска и отладки:

/Главная /behlingb/Документы/api_libs/FileGDB_API/Библиотека

Что еще мне не хватает, чтобы запустить Eclipse?



ОБНОВИТЬ

Для этого приложения требуется только один файл общих объектов, и этот файл загружается из стороннего API-интерфейса. Я просто обнаружил, что если я поместил общий объект в каталог, в который входит исполняемый файл, он будет отлаживаться в Eclipse. Есть ли способ указать другой каталог, поэтому мне не нужно копировать файл для каждого проекта?

Ответ 1

Я использую кеплеровскую версию Eclipse.

  1. В Eclipse нажмите "Выполнить", затем "Конфигурации отладки"
  2. Нажмите вкладку "Среда"
  3. Нажмите "Создать"
  4. Добавьте LD_LIBRARY_PATH и установите его значение в каталог, содержащий библиотеку
  5. перезапустить Eclipse

Ответ 2

Если вы установили LD_LIBRARY_PATH это не сработает. Закройте Eclipes и запустите его из командной строки. Я случайно обнаружил, что это может заставить его работать. Не уверен в причине, но, вероятно, имеет какое-то отношение к инициализации Eclipes.

Ответ 3

вы можете использовать утилиту strace (а затем grep для open и/или stat вызовов), чтобы получить список файлов.so, необходимых для запуска smth, а затем использовать locate (или найти среди пакетов), чтобы узнать фактическое размещение требуемой библиотеки lib

Ответ 4

В соответствии с тем, что предложил @zuafi, вам не нужно готовить библиотеки и "найти", чтобы найти их.

Вместо этого сохраните вывод strace в файл:

strace -o my_output_file.txt /path/to/my_executable_file

затем откройте файл, где вы можете видеть

open("/a/path/to/some/library.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)

прокрутите эти строки до тех пор, пока вы не

open("/real/path/to/some/library.so", O_RDONLY|O_CLOEXEC) = 3 (any value here)

это означает, что перед поиском /real/path/to/some/library.so было несколько попыток найти library.so на разных путях. но, наконец, библиотека была найдена в /real/path/to/some/.

Просто скопируйте и вставьте это в свой Eclipse!

Ответ 5

Это справедливо с Eclipse Kepler (я не смотрел старые версии). Чтобы позволить отладчику загружать ваши общие библиотеки, попытка установить LD_LIBRARY_PATH не удастся. Однако плагин CDT предоставляет список общих библиотек для этой цели

Выполнить меню → Конфигурации отладки...

затем в диалоговом окне конфигурации

Приложение C/C++ → ваш проект → вкладка отладчика → вкладка " Общие библиотеки "

The Kepler dialog for adding debug shared libraries