0

我刚刚从源代码在 Ubuntu 服务器中安装了 postfix 2.7.11。我不使用 ubuntu 自己的,因为我需要旧版本。

我发现了一个非常有趣的问题。以前,在 CentOS 5 和 6 中,我都可以毫无问题地构建源代码。但是,在 Ubuntu 服务器 12.04 中是完全不同的。

我遇到了以下问题:

dict_nis.c:173: error: undefined reference to 'yp_match'<br>
dict_nis.c:187: error: undefined reference to 'yp_match'<br>

dns_lookup.c:347: error: undefined reference to '__dn_expand'<br>
dns_lookup.c:218: error: undefined reference to '__res_search'<br>
dns_lookup.c:287: error: undefined reference to '__dn_expand'<br>
dns_lookup.c:498: error: undefined reference to '__dn_expand'<br>
dns_lookup.c:383: error: undefined reference to '__dn_expand'<br>

是的,这个理由很明显。我只是搜索相关库并将其添加到 makefile 中。有用。

问题是为什么?Ubuntu Server 和 CentOS 有什么区别?

一种可能性是 gcc 和 ld 版本。Ubuntu 服务器在 CentOS 中使用不同版本的 gcc 和 ld。但我不确定。

4

3 回答 3

0

最后,在别人的帮助下。我找到了原因。
Ubuntu 有特殊的 .so 位置。位置与 CentOS 不同。
但是在 Postfix makedefs 文件中,它不包含这个特定的位置。让我们检查一下来源:

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 将在 do make 时使用。该脚本将检查一些特殊文件夹以添加 .so 库。但这些位置不包括 Ubuntu 的。

于 2012-08-28T02:49:34.257 回答
0

我在使用 vda-patch 2.9.1 的 Ubuntu 12.04 和 postfix 2.9.3 上遇到了同样的问题

gcc -Wmissing-prototypes -Wformat -DDEBIAN -DMAX_DYNAMIC_MAPS -DHAS_PCRE -DHAS_LDAP -DHAS_SQLITE -DMYORIGIN_FROM_FILE -DNO_NIS -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAS_CDB -DHAS_MYSQL -I/usr/include/mysql -DHAS_PGSQL -I/usr/include/postgresql -DHAS_SQLITE -I/usr/include -DHAS_SSL -I/usr/include/openssl -DUSE_SASL_AUTH -I/usr/include/sasl -DUSE_CYRUS_SASL -DUSE_TLS  -O2 -I. -I../../include -DLINUX3 -o smtpd smtpd.o smtpd_token.o smtpd_check.o smtpd_chat.o smtpd_state.o smtpd_peer.o smtpd_sasl_proto.o smtpd_sasl_glue.o smtpd_proxy.o smtpd_xforward.o smtpd_dsn_fix.o smtpd_milter.o smtpd_resolve.o smtpd_expand.o ../../lib/libmaster.a ../../lib/libtls.a ../../lib/libdns.a ../../lib/libxsasl.a ../../lib/libmilter.a ../../lib/libglobal.a ../../lib/libutil.a -lssl -lcrypto -lsasl2 -lpthread -L/usr/src/postfix-2.9.3/debian -ldb
../../lib/libdns.a: undefined reference to `__res_search'
../../lib/libdns.a: undefined reference to `__dn_expand'
collect2: ld gab 1 als Ende-Status zurück
make: *** [smtpd] Fehler 1

问题:缺少-lresolv

在文件“makedefs”中:gcc -print-search-dirs | sed -n '/^libraries: =/s/libraries: =//p' 对我不起作用,因为我有德语版的 Ubuntu。gcc -print-search-dirs 输出为“Bibliotheken:”

请参阅http://www.howtoforge.com/forums/showthread.php?p=287215

于 2012-10-23T18:34:52.590 回答
0

您应该附加-ldb -lnsl -lresolvAUXLIBS.

于 2013-06-18T14:39:04.990 回答