Давайте сначала посмотрим на параметры вашей командной строки.
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
должен сделать свое дело, если это имя пакета.