проблемы с общей библиотекой в ​​linux

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

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

/usr/bin/ld: cannot find -lXaw

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

ldconfig -v | grep libXaw

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

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

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

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

Есть идеи?


person Nils Pipenbrinck    schedule 12.10.2008    source источник


Ответы (4)


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

person ejgottl    schedule 12.10.2008
comment
Спасибо, эта ссылка исправила. У вас есть идеи, почему это необходимо в первую очередь? Другие библиотеки с похожими схемами именования работают без проблем. - person Nils Pipenbrinck; 12.10.2008
comment
Обычно символическая ссылка .so предоставляется в пакете разработки в большинстве дистрибутивов (например, libxaw-dev). Может это ваш случай? - person Chris Jester-Young; 12.10.2008
comment
Можете ли вы привести конкретный пример? Как в: Я нормально связываюсь с -lfoo, но в моей системе нет libfoo.so или libfoo.a, только libfoo.so.1.0. - person ejgottl; 12.10.2008

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

person Marco van de Voort    schedule 11.05.2009

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

person HUAGHAGUAH    schedule 12.10.2008

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

person MarkR    schedule 12.10.2008
comment
Гм, это может быть правдой в Windows, но в Linux вы обычно связываетесь с самой общей библиотекой. - person JesperE; 12.10.2008
comment
путаница, вероятно, связана с тем, что .lib используется для обозначения как статических, так и импортируемых библиотек (последние, как я понимаю, являются прокси-серверами для общих библиотек). - person just somebody; 03.02.2010