2009-11-06 2 views
1

Вот кодошибка линкера для ns_initparse

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <netinet/in.h> 
#include <resolv.h> 

int main (int argc, char *argv[]) 
{ 
    u_char nsbuf[4096]; 
    char dispbuf[4096]; 
    ns_msg msg; 
    ns_rr rr; 
    int i, j, l; 

    if (argc < 2) { 
     printf ("Usage: %s <domain>[...]\n", argv[0]); 
     exit (1); 
    } 

    for (i = 1; i < argc; i++) { 
     l = res_query (argv[i], ns_c_any, ns_t_mx, nsbuf, sizeof (nsbuf)); 
     if (l < 0) { 
      perror (argv[i]); 
     } else { 
#ifdef USE_PQUERY 

/* this will give lots of detailed info on the request and reply */ 

      res_pquery (&_res, nsbuf, l, stdout); 
#else 

/* just grab the MX answer info */ 

      ns_initparse (nsbuf, l, &msg); 
      printf ("%s :\n", argv[i]); 
      l = ns_msg_count (msg, ns_s_an); 
      for (j = 0; j < l; j++) { 
       ns_parserr (&msg, ns_s_an, j, &rr); 
       ns_sprintrr (&msg, &rr, NULL, NULL, dispbuf, sizeof (dispbuf)); 
       printf ("%s\n", dispbuf); 
      } 
#endif 
     } 
    } 

    exit (0); 
} 

Я скомпилировать как

НКУ dns.c -lresolv

и я получаю следующую ошибку Linker

В функции main': dns.c:(.text+0xd5): undefined reference to __ns_initparse ' dns.c :(. Текст + 0x130): неопределенная ссылка на __ns_parserr' dns.c:(.text+0x16a): undefined reference to __ns_sprintrr'

Помощь

+0

thanx много jason – Bruce

+0

Из-за быстрого поиска в Google кажется, что эти функции считаются внутренними и поэтому намеренно не экспортируются. Они могут присутствовать в статической библиотеке. Это также зависит от версии; было много версий API BIND. http://jira.secondlife.com/browse/VWR-1598 и http://www.newsgroups-index.com/group/linux_-debian_-maint_-glibc_l361.html – Cascabel

ответ

0

Я считаю, что вам нужно добавить

#include <arpa/nameser.h> 

в файл

1

Linking с библиотекой распознавателя помог устремил вопрос для меня, я добавил -lresolv к моей команде компиляции.

Смежные вопросы