Не удается открыть файл общих объектов: нет такого файла или каталога; Запуск или отладка в 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.
- В Eclipse нажмите "Выполнить", затем "Конфигурации отладки"
- Нажмите вкладку "Среда"
- Нажмите "Создать"
- Добавьте LD_LIBRARY_PATH и установите его значение в каталог, содержащий библиотеку
- перезапустить 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]()