проблемы с общей библиотекой в ​​Linux - PullRequest
4 голосов
/ 12 октября 2008

Я пытаюсь скомпилировать / связать очень старое программное обеспечение в системе Linux, и по какой-то причине я не могу связать его с общей библиотекой, установленной в моей системе.

Я получаю следующую ошибку от компоновщика:

/usr/bin/ld: cannot find -lXaw

Однако сама библиотека установлена. Если я бегу

ldconfig -v | grep libXaw

Я получаю (среди прочего) этот хит:

libXaw.so.7 -> libXaw7.so.7.0.0

Библиотека и ссылки на нее находятся в / usr / lib btw. Так что ничего особенного.

Итак, библиотека есть, и ldconfig находит ее. Что может привести к тому, что ld не найдет библиотеку во время соединения? Как вы, возможно, уже догадались, я довольно новичок в общей библиотеке.

Есть идеи?

Ответы [ 4 ]

3 голосов
/ 11 мая 2009

Причиной для символической ссылки между прочим является выбор версии по умолчанию для ссылки в случае нескольких версий, имейте в виду, что имя библиотеки интегрировано в двоичный файл. (который вы можете увидеть с помощью ldd).

3 голосов
/ 12 октября 2008

Компоновщик может буквально искать "libXaw.so". Это в / usr / lib? Если нет, вы можете попробовать добавить его в качестве другой мягкой ссылки из libXaw7.so.7.0.0.

0 голосов
/ 12 октября 2008

Переопределяются ли каталоги библиотеки -L и они не отображаются в / usr / lib?

0 голосов
/ 12 октября 2008

Чтобы связать его, вам нужен файл .a, а не файл .so, который является библиотекой времени выполнения. Общий объект полезен только для программы, уже связанной с частными частями библиотеки. Обычно он распространяется в файле ".a".

...