2012-08-08 1 views
0

방금 ​​우분투 서버에 2.7.11의 후위를 소스 코드에서 설치했습니다. 내가 우분투 자신의 하나를 사용하지 않기 때문에 이전 버전이 필요합니다.우분투 서버에서 같은 코드를 컴파일 할 수없는 이유는 무엇입니까?

매우 흥미로운 문제점을 발견했습니다. 이전에 CentOS 5와 6 모두에서 문제없이 소스 코드를 만들 수있었습니다. 하지만 우분투 서버 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> 

예,이 이유는 분명하다. 난 그냥 관련 라이브러리를 검색하고 메이크 파일에 추가하십시오. 그것은 작동합니다.

질문은 이유가 무엇입니까? 우분투 서버와 CentOS의 차이점은 무엇입니까?

하나의 가능성은 gcc 및 ld 버전입니다. 우분투 서버는 CentOS와 다른 버전의 gcc와 ld를 사용합니다. 그러나 나는 확실하지 않다.

+0

IIRC postfix는'autoconf' 기반이므로,'config.log'를 게시하거나 자신을 먼저 들여다 보면 필요한 라이브러리를 찾지 못하는 이유를 알 수 있습니다. – favoretti

+0

안녕하세요 @ favoretti config.log를 찾을 수 없습니다. 어떻게 찾을 수 있는지 알려주시겠습니까? 필자가 언급해야 할 한가지는 소스에서 postfix를 설치할 때, make ./configure를 실행할 필요가 없다는 것입니다. 사실, 나는 make를 직접 실행할 수 있습니다. – Coofucoo

답변

0

마지막으로 다른 도움이 필요합니다. 이유를 찾았습니다.
우분투에는 특별한 .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가 사용됩니다. 이 스크립트는 .so lib를 추가 할 수있는 특수 폴더를 확인합니다. 그러나이 위치에는 Ubuntu 's가 포함되지 않습니다. 파일 "makedefs"에서 -lresolv

누락 : GCC -print

0


나는 VDA-패치 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 

문제와 우분투 12.04 및 접미사 2.9.3와 같은 문제가 있었다 -search-dirs | sed -n '/^libraries : =/s/libraries : = // p는 독일어로 우분투를 사용하기 때문에 저에게 적합하지 않았습니다. gcc가 -print-검색 DIRS 출력은 "Bibliotheken :"입니다

당신은 AUXLIBS-ldb -lnsl -lresolv을 추가해야 http://www.howtoforge.com/forums/showthread.php?p=287215

+0

http://irbs.net/internet/postfix/0409/1719.html CCARGS = "- DHAS_CDB -DHAS_PCRE"AUXLIBS = "- lnsl -lpcre -lcdb"makefile을 만들고 & make -j 3 – wufoo