undefined reference to `__ns_initparse' 에러가 발생합니다.
글쓴이: 익명 사용자 / 작성시간: 목, 2018/07/19 - 5:30오후
c를 시작한지 얼마안된 초보입니다.
네임서버에 질의하여 MX레코드를 출력하고자합니다.
CentOS release 6.10 에서는 컴파일 되어 정상적인 결과를 출력했는데,
CentOS release 5.4 에서는 아래와 같은 에러가 발생됩니다.
-----------------------------------------------------------------
# gcc -lresolv mx_01.c
/tmp/cc4DM9Nc.o: In function `main':
mx_01.c:(.text+0x4e): undefined reference to `__ns_initparse'
mx_01.c:(.text+0x7f): undefined reference to `__ns_parserr'
mx_01.c:(.text+0xac): undefined reference to `__ns_sprintrr'
collect2: ld returned 1 exit status
------------------------------------------------------------------
/* MX 레코드 반환 gcc -lresolv mx_01.c */ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <netinet/in.h> #include <resolv.h> #include <netdb.h> #include <arpa/nameser.h> int main (int argc, char *argv[]) { unsigned char maAnswer[PACKETSZ]; char dispbuf[PACKETSZ]; ns_msg msg; ns_rr rr; int i, l, nAnswerLen; // MX RECORD nAnswerLen = res_query("naver.com", ns_c_any, ns_t_mx, maAnswer, sizeof(maAnswer)); ns_initparse(maAnswer, nAnswerLen, &msg); l = ns_msg_count(msg, ns_s_an); for (i = 0; i < l; i++) { ns_parserr(&msg, ns_s_an, i, &rr); ns_sprintrr(&msg, &rr, NULL, NULL, dispbuf, sizeof(dispbuf)); printf ("%s\n", dispbuf); } return 0; }
Forums:
centos 5 glibc의 libresolv.so
centos 5 glibc의 libresolv.so 에는 ns_initparse 가 없네요. visivility hidden 상태의 __ns_initparse 만 존재하고 ns_initparse 가 없습니다.
Centos 5 에서도 동일하게 빌드를 하셔야 한다면 ns_initparse 를 구현 하셔야 겠네요 :)
libresolv-2.5.so 는 Centos 5의 마지막 glibc 에 있는 것이고, libresolv-2.12.so 는 CentOS 6의 마지막 glibc 에 포함되어 있는 것입니다.
symbol type에서 small t 와 large T의 차이는 https://stackoverflow.com/questions/37531846/nm-symbol-output-t-vs-t-in-a-shared-so-library 를 참고 하세요.
여담으로 CentOS 5는 지원이 중단되었습니다.
여담으로 CentOS 5는 지원이 중단되었습니다. 반드시 써야만 할 이유가 없다면 최신 버전을 사용하는 것을 권장합니다.
https://www.centos.org/forums/viewtopic.php?t=57398
답변 감사합니다.
답변 감사합니다.
댓글 달기