2008-10-12 2 views
4

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

я получаю следующее сообщение об ошибке от линкера:

/usr/bin/ld: cannot find -lXaw 

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

ldconfig -v | grep libXaw 

я (среди прочего) этого хита:

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

Библиотека и ссылки на него в/USR/Lib кстати. Так что ничего особенного.

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

Любые идеи?

ответ

3

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

+0

Спасибо, эта ссылка исправлена. У вас есть идеи, почему это важно в первую очередь? Другие библиотеки с похожими схемами именования работают без проблем. –

+0

Обычно символическая ссылка .so предоставляется в пакете разработки в большинстве дистрибутивов (например, libxaw-dev). Может ли это быть вашим делом? –

+0

Можете ли вы привести конкретный пример? Как и в: я отлично связываю с -lfoo, но в моей системе нет libfoo.so или libfoo.a, только libfoo.so.1.0. – ejgottl

-1

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

+0

Ум, это может быть правдой в Windows, но в Linux вы обычно связываетесь с самой общей библиотекой. – JesperE

+0

путаница, вероятно, проистекает из того, что '.lib' используется для обозначения как статических, так и импортных библиотек (последние, как я понимаю, являются« прокси-серверами »для общих библиотек). –

0

Являются ли каталоги библиотек -L переопределенными и не ищут в/usr/lib?

3

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

Смежные вопросы