Не удается найти -lagent при компиляции исходного кода c (несовместимая библиотека) - PullRequest
2 голосов
/ 11 января 2012

С gcc в Ubuntu я использовал эту команду для компиляции моего исходного кода:

gcc 1.c -L. -lagent -lm -lpthread -o 1

но я получил эту ошибку:

/usr/bin/ld: skipping incompatible ./libagent.so when searching for -lagent
/usr/bin/ld: cannot find -lagent
collect2: ld returned 1 exit status

Как мне это решить?

Ответы [ 2 ]

1 голос
/ 11 января 2012

Компоновщик сообщает вам, что файл ./libagent.so существует, но не в соответствующем формате .

Это может быть пустой файл или созданный для 32-разрядныхвместо 64-битной, или это может быть символическая ссылка, указывающая на неправильную версию.

0 голосов
/ 11 января 2012

Давайте сначала посмотрим на параметры вашей командной строки.

gcc 1.c -L. -lagent -lm -lpthread -o 1

Вы вызываете компилятор gcc с исходным кодом ввода 1.c, а затем указываете дополнительный (ссылка) путь к библиотеке для включения текущего каталога (.) -L.. Затем вы указываете ему ссылку на библиотеки агента и pthread, где разделяемые (динамические) библиотеки имеют формат имени по умолчанию libNAME.so, где NAME заменяется именем. Статические библиотеки имеют расширение по умолчанию .a (от термина archive ). Затем вы указываете вывод (исполняемый в данном случае) как файл 1 (цифра один, а не буква 'ell').

/usr/bin/ld: skipping incompatible ./libagent.so when searching for -lagent

Это компоновщик (ld), сообщающий, что файл ./libagent.so (предположительно найденный в текущем каталоге) не является допустимым форматом совместно используемой библиотеки, как ожидалось. Это может быть для другой архитектуры компьютера (x86-64, ARMle, PowerPC, MIPS) или несовместимого формата библиотеки (я не знаю, имеют ли файлы библиотеки .so какие-либо COFF или ELF или PE зависимости или нет). Или просто пустой или поврежденный (например, прерванный вывод из-за ошибок компиляции / компоновки).

Таким образом, вы обычно хотите , а не включить ваш текущий каталог в путь поиска вашего компоновщика, , если у вас нет копии библиотеки, которую вы еще не установили (обычно в / usr / lib / или / usr / local / lib /), например, вы написали библиотеку и хотите связать с ней тестовые программы перед ее установкой.

Debian и Unbuntu-ориентированная часть ответа:

Обычно вы хотите установить компонент времени выполнения совместно используемой библиотеки (часто называемый чем-то вроде libagent) и связанные файлы разработки (чаще всего, по крайней мере, заголовочный файл и, возможно, man-страницу) в формате libagent-dev. В Linux-системах на основе RPM используются соглашения об именах в стиле libagent-devel (из памяти). Так что sudo aptitude install libagent-dev должен сделать свое дело, если это имя пакета.

...