Я собираю что-то из исходного кода и получаю следующий вывод при запуске make:
...
CC libpromises_la-mod_outputs.lo
CC libpromises_la-unix.lo
CCLD libpromises.la
CC cfknow.o
CC manual.o
CCLD cf-know
./.libs/libpromises.so: undefined reference to `dlerror'
./.libs/libpromises.so: undefined reference to `dladdr'
./.libs/libpromises.so: undefined reference to `dlclose'
./.libs/libpromises.so: undefined reference to `dlopen'
./.libs/libpromises.so: undefined reference to `dlsym'
collect2: ld returned 1 exit status
gmake[2]: *** [cf-know] Error 1
gmake[2]: Leaving directory `/tmp/cfengine/cfengine-3.1.5/src'
gmake[1]: *** [all] Error 2
gmake[1]: Leaving directory `/tmp/cfengine/cfengine-3.1.5/src'
gmake: *** [all-recursive] Error 1
Я немного погуглил, и кажется, что компоновщик не может найти определенные файлы. Мне никогда не приходилось сталкиваться с чем-то подобным, поэтому мне интересно, может ли кто-нибудь помочь мне расшифровать это сообщение и пролить свет на то, КАКОЙ файл не может быть найден и как я могу сообщить компоновщику, где он находится.
Я знаю, что ссылка исходит из libpromises.so
двоичного файла. Следовательно, открытие его в vi только дает мне мусор. Я должен искать libpromises.h
? libpromises.c
?
Ответы:
Вы должны иметь возможность редактировать Makefile и выполнить это быстро.
ПРИМЕЧАНИЕ. - Предполагается, что Makefile был создан GNU Autotools. Согласно tarfball Cfengine, они делают.
Сначала откройте Makefile и найдите флаг
LDFLAGS
. Это должно выглядеть примерно так:Добавить в этот список
-ldl
. Это добавляет ссылку на библиотеку динамической загрузки.Перекомпилируйте, и компоновщик сможет выполнить свою работу.
Переменная окружения LIBS - это переменная окружения, которая сообщает,
./configure
какие дополнительные библиотеки нужны, и затем вставляет их в Makefile (поэтому, чтобы ответить на ваш вопрос, на./configure
самом деле не запускает компоновщик - он создает Makefile, который работаетgcc
с параметрами, которые он получил от./configure
).Итак, пользуйтесь
LIBS=-ldl && ./configure
.источник
export LIBS=-ldl && ./configure
. Разорвал отсюда .