Я только что установил postfix 2.7.11 на сервер Ubuntu из исходного кода. Я не использую собственную Ubuntu, потому что мне нужна старая версия.
Я нашел очень интересную проблему. Раньше в CentOS 5 и 6 я мог без проблем создавать исходный код. Но в Ubuntu server 12.04 совершенно другой.
У меня возникли следующие проблемы:
dict_nis.c:173: error: undefined reference to 'yp_match'
dict_nis.c:187: error: undefined reference to 'yp_match'
dns_lookup.c:347: error: undefined reference to '__dn_expand'
dns_lookup.c:218: error: undefined reference to '__res_search'
dns_lookup.c:287: error: undefined reference to '__dn_expand'
dns_lookup.c:498: error: undefined reference to '__dn_expand'
dns_lookup.c:383: error: undefined reference to '__dn_expand'
Да, эта причина очевидна. Я просто ищу соответствующую библиотеку и добавляю ее в make-файл. Оно работает.
Вопрос в том, почему? В чем разница между Ubuntu Server и CentOS?
Одной из возможностей является версия gcc и ld. Сервер Ubuntu использует разные версии gcc и ld с CentOS. Но я не уверен.
Наконец, с помощью других. Я нашел причину.
У Ubuntu есть специальное местоположение .so. Расположение отличается от CentOS.
Но в файле makedefs Postfix он не включает это конкретное местоположение. Давайте проверим источник:
SYSLIBS="-ldb"
for name in nsl resolv
do
for lib in /usr/lib64 /lib64 /usr/lib /lib
do
test -e $lib/lib$name.a -o -e $lib/lib$name.so && {
SYSLIBS="$SYSLIBS -l$name"
break
}
done
done
Здесь SYSLIBS будет использоваться, когда он будет работать. Этот скрипт проверит некоторую специальную папку для добавления .so lib. Но эти места не включают в себя Ubuntu.
Вы должны добавить -ldb -lnsl -lresolv
к AUXLIBS
.
Пакет postfix
в Ubuntu автоматически установит все зависимые библиотеки для установки, называемые «Зависимости сборки».
Я бы порекомендовал вам установить все пакеты зависимостей сборки, показанные по этой ссылке , а затем попытаться пересобрать, скорее всего, вам не хватает определенных библиотек для компиляции.