GDB говорит "не могу открыть общий объектный файл" - PullRequest
6 голосов
/ 31 мая 2009

У меня есть одна двоичная и одна общая библиотека. Общая библиотека скомпилирована с:

all:
g++ -g -shared -fpic $(SOURCES) -o libmisc.so

двоичный файл скомпилирован с:

LIBS=-L../../misc/src

LDFLAGS=-lmisc

all:
g++ -g -o mainx $(INCLUDE) $(SOURCE) $(LIBS) $(LDFLAGS)

Я установил ~/.bashrc

export LD_LIBRARY_PATH=/mnt/sda5/Programming/misc/src/

к выходному пути libmisc.so.

Отладка с консоли работает нормально:

gdb mainx

Однако из Emacs22 запуск gdb завершается неудачно со следующим сообщением:

Запуск программы: / mnt / sda5 / Programming / main / src / mainx / mnt / sda5 / Programming / main / src / mainx: ошибка при загрузке общих библиотек: libmisc.so: невозможно открыть общий объектный файл: такого файла или каталога нет

Это выглядит очень сложно на данный момент, и я не мог решить это. Я не уверен, является ли это проблемой emacs, или я должен передать параметр в командной строке GDB.

Ответы [ 3 ]

6 голосов
/ 31 мая 2009

Emacs не вызывает gdb через bash, а вызывает его напрямую, поэтому изменения .bashrc не вступают в силу, и LD_LIBRARY_PATH не установлено.

Если вы выйдете из emacs, откроете новую оболочку (поэтому установлена ​​LD_LIBRARY_PATH), запустите в ней emacs, а затем выполните M-X gdb, тогда она будет работать.

Установка solib-search-path в GDB - это взлом.

Гораздо лучшим решением является сборка исполняемого файла таким образом, что для начала не требуется LD_LIBRARY_PATH:

LDFLAGS=-lmisc -Wl,-rpath=/mnt/sda5/Programming/misc/src
5 голосов
/ 12 августа 2011

Другой способ - создать файл .gdbinit в вашем $HOME и установить там LD_LIBRARY_PATH:

# file .gdbinit
set env LD_LIBRARY_PATH=/mnt/sda5/Programming/misc/src/

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

5 голосов
/ 31 мая 2009

Emacs, вероятно, не читает ваш .bashrc, прежде чем он вызовет GDB. Попробуйте вместо этого установить «set solib-search-path» и «set solib-absolute-path» в вашем файле .gdbinit

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...