Вопрос или проблема
Когда я пытаюсь запустить скрипт ./install.sh для OSSEC HIDS, я продолжаю получать эти странные ошибки:
/usr/bin/ld: client-agent/config.o:(.bss+0x0): множественное определение `server_ibuf'; client-agent/agentd.o:(.bss+0x0): впервые определено здесь
/usr/bin/ld: client-agent/event-forward.o:(.bss+0x0): множественное определение `server_ibuf'; client-agent/agentd.o:(.bss+0x0): впервые определено здесь
/usr/bin/ld: client-agent/intcheck_op.o:(.bss+0x0): множественное определение `server_ibuf'; client-agent/agentd.o:(.bss+0x0): впервые определено здесь
/usr/bin/ld: client-agent/main.o:(.bss+0x0): множественное определение `server_ibuf'; client-agent/agentd.o:(.bss+0x0): впервые определено здесь
/usr/bin/ld: client-agent/notify.o:(.bss+0x0): множественное определение `server_ibuf'; client-agent/agentd.o:(.bss+0x0): впервые определено здесь
/usr/bin/ld: client-agent/receiver.o:(.bss+0x0): множественное определение `server_ibuf'; client-agent/agentd.o:(.bss+0x0): впервые определено здесь
/usr/bin/ld: client-agent/sendmsg.o:(.bss+0x0): множественное определение `server_ibuf'; client-agent/agentd.o:(.bss+0x0): впервые определено здесь
/usr/bin/ld: client-agent/start_agent.o:(.bss+0x0): множественное определение `server_ibuf'; client-agent/agentd.o:(.bss+0x0): впервые определено здесь
/usr/bin/ld: os_net.a(os_net.o):(.bss+0x0): множественное определение `agt'; client-agent/config.o:(.bss+0x10088): впервые определено здесь
collect2: ошибка: ld вернул статус выхода 1
make: *** [Makefile:1017: ossec-agentd] Ошибка 1
Я установил все зависимости и обновил все (apt update и т.д.), но ничего не помогает решить эту проблему. У кого-нибудь есть предложения?
Кроме того, я пытаюсь сделать локальную установку. Если нужно что-то еще, дайте знать.
Вы когда-нибудь пробовали установить пакет libsystemd-dev
?
Большинство из этих проблем при компиляции возникают из-за этого.
Чтобы это не потерялось в теме,
вы также можете попробовать собрать свой проект, игнорируя некоторые проблемы компоновщика, добавив LDFLAGS="-Wl,-z,muldefs"
перед вашей командой, например:
LDFLAGS="-Wl,-z,muldefs" ./install.sh
или
LDFLAGS="-Wl,-z,muldefs" make
внутри папки src.
Ответ или решение
При установке OSSEC HIDS и возникновении ошибок, таких как:
/usr/bin/ld: client-agent/config.o:(.bss+0x0): multiple definition of `server_ibuf'; client-agent/agentd.o:(.bss+0x0): first defined here
/usr/bin/ld: client-agent/event-forward.o:(.bss+0x0): multiple definition of `server_ibuf'; client-agent/agentd.o:(.bss+0x0): first defined here
...
collect2: error: ld returned 1 exit status
make: *** [Makefile:1017: ossec-agentd] Error 1
вы сталкиваетесь с проблемой множественного определения переменной server_ibuf
, а также других переменных в различных объектных файлах. Эта проблема часто возникает из-за неправильно организованного кода в C или C++ проекте, где глобальные переменные определены в нескольких файлах.
Возможные решения:
-
Проверка зависимостей: Убедитесь, что все необходимые зависимости установлены. Особенно обратите внимание на пакет
libsystemd-dev
, который многие пользователи описывали как решающий при возникновении подобных ошибок. Вы можете установить его с помощью следующей команды:sudo apt-get install libsystemd-dev
-
Использование LDFLAGS: Если исправление кода невозможно или занимает много времени, вы можете попробовать игнорировать некоторые ошибки компоновки, добавив флаг при запуске скрипта установки или команды
make
. Вы можете выполнить одну из следующих команд:LDFLAGS="-Wl,-z,muldefs" ./install.sh
или
cd src LDFLAGS="-Wl,-z,muldefs" make
Хотя данный подход может помочь вам продолжить установку, это не устраняет основную проблему с множественными определениями переменных.
-
Редактирование кода: Если вы знакомы с исходным кодом, вы можете вносить изменения самостоятельно. Постарайтесь убедиться, что глобальные переменные в файлах определены только в одном месте. Все остальные файлы могут использовать
extern
для обращения к этим переменным. Например:// В одном файле int server_ibuf; // В других файлах extern int server_ibuf;
-
Обновление исходного кода: Возможно, вы используете устаревшую версию OSSEC. Попробуйте обновить исходный код, загрузив последнюю стабильную версию с официального репозитория. Это может как устранить ошибку, так и включить исправления, которые решают данную проблему.
-
Искать решение в сообществе: Если проблема не решается, рекомендуется обратиться на форумы или в общественные группы, посвященные OSSEC. Возможно, кто-то сталкивался с аналогичной проблемой и может предложить решение.
Заключение
Ошибки компоновщика могут быть сложными и непредсказуемыми. Однако, следуя приведенным рекомендациям, вы сможете сузить круг поиска решения. Убедитесь, что все зависимости установлены, рассмотрите возможность применения флагов компоновщика и, при необходимости, внесите изменения в код. Обовите сообщения об ошибках, если ни одно из решений не сработало, и не бойтесь обращаться за помощью к сообществу.