0

ソースコードからUbuntuサーバーにpostfix2.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の違いは何ですか?

1つの可能性は、gccおよびldバージョンです。UbuntuサーバーはCentOSで異なるバージョンのgccとldを使用します。しかし、私にはわかりません。

4

3 に答える 3

0

Ubuntu 12.04 と postfix 2.9.3 と vda-patch 2.9.1 で同じ問題が発生しました

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

最後に、他の人の助けを借りて。理由がわかりました。
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 

ここでは、make を実行するときに SYSLIBS が使用されます。このスクリプトは、いくつかの特別なフォルダーをチェックして、.so lib を追加します。ただし、これらの場所には Ubuntu は含まれません。

于 2012-08-28T02:49:34.257 に答える