C ns_initparse的链接器错误

C ns_initparse的链接器错误,c,gcc,linker,C,Gcc,Linker,这是密码 #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 r

这是密码

#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);
}
#包括
#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
u_char nsbuf[4096];
char dispbuf[4096];
味精;
ns_rr;
int i,j,l;
如果(argc<2){
printf(“用法:%s[…]\n”,argv[0]);
出口(1);
}
对于(i=1;i
我把它编译成

gcc dns.c-lresolv

我得到以下链接器错误

在函数
main'中:
dns.c:(.text+0xd5):未定义对
\uu ns\u initparse'的引用 dns.c:(.text+0x130):对
\uu ns\u parserr'的未定义引用
dns.c:(.text+0x16a):未定义对
\u ns\u sprintrr'的引用


帮助

我相信您需要添加

#include <arpa/nameser.h> 
#包括

在你的文件中

与解析器库的链接帮助我解决了他的问题,我在我的编译命令中添加了
-lresolv

通过快速搜索,这些函数似乎被认为是内部函数,因此故意不导出。它们可能存在于静态库中。这也可能与版本有关;BINDAPI有很多版本。这将不起作用,因为标头不能定义引用。