Сделать ссылку на установленную библиотеку, а не на библиотеку dev - PullRequest
0 голосов
/ 17 июня 2011

У меня странная проблема, которая, как мне кажется, связана с Makefile для общего проекта с открытым исходным кодом, с которым я экспериментирую.Я не эксперт по Makefile, я только сделал обычные ./configure и make install.

По сути, я добавляю несколько простых операторов print в некоторый исходный код, который скомпилирован в библиотеку.Печатные заявления не появляются.Затем я пытаюсь войти в библиотеку с помощью отладчика, и он просто «пропускает» весь раздел (он был скомпилирован с -g -O0).Это заставляет меня поверить, что когда я запускаю make, он ссылается на установленную библиотеку в моей системе, а не на недавно скомпилированную библиотеку в моей папке dev src.

В make-файле есть одна строка, которая выглядит связанной: prefix = / usr / local

Какие-либо легкие изменения, которые я могу внести, или в любом случае, чтобы подтвердить мои подозрения?

Ответы [ 2 ]

0 голосов
/ 17 июня 2011

Вы не говорите, для какой ОС, но в Linux вы сможете выяснить, какой именно файл был загружен для данной библиотеки, проверив / proc // maps.Например, если я хочу знать, какой файл использовался для предоставления libncurses.so для моей оболочки, я мог бы сделать:

$ cat /proc/$$/maps | grep ncurses

, который выводит меня как:

    7f25ab1e4000-7f25ab224000 r-xp 00000000 08:01 6029412                    /lib/libncurses.so.5.7
    7f25ab224000-7f25ab423000 ---p 00040000 08:01 6029412                    /lib/libncurses.so.5.7
    7f25ab423000-7f25ab427000 r--p 0003f000 08:01 6029412                    /lib/libncurses.so.5.7
    7f25ab427000-7f25ab428000 rw-p 00043000 08:01 6029412                    /lib/libncurses.so.5.7

Так что теперьЯ знаю, что ncurses.so был удовлетворен /lib/libncurses.so.5.7

. Для вашего процесса просто замените «$$» на PID вашего работающего процесса.Другие UNIX-подобные операционные системы обычно имеют интерфейс / proc или системный инструмент, который может предоставить вам эту информацию о запущенном процессе.Например, в Solaris команда 'pldd' может показать вам эквивалент вывода ldd, но для любого запущенного процесса.

0 голосов
/ 17 июня 2011

Если библиотека связана динамически, вы можете запустить ldd на любом исполняемом вами исполняемом файле, чтобы определить, какой из них выбирается. Если это не то, что вы ожидаете, вы можете установить LD_LIBRARY_PATH, чтобы переопределить путь поиска для общих объектов. И если он связан статически, путь должен быть где-то в make-файле. Используйте grep, чтобы найти его.

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