gpt4 book ai didi

c - 使用带有 gcc 的 windns.h 编译代码的链接器错误

转载 作者:太空宇宙 更新时间:2023-11-04 03:12:29 34 4
gpt4 key购买 nike

<分区>

我正在尝试在 C 中执行简单的 DNS 查找。这是我的代码(我主要从示例中复制):

#include <winsock2.h>
#include <windns.h>
#include <stdio.h>

char* DNS_Lookup(char* host) {
DNS_STATUS status; //Return value of DnsQuery_A() function.
PDNS_RECORD pDnsRecord; //Pointer to DNS_RECORD structure.
PIP4_ARRAY pSrvList = NULL; //Pointer to IP4_ARRAY structure.
WORD wType; //Type of the record to be queried.
char* pOwnerName = host; //Owner name to be queried.
char pReversedIP[255]; //Reversed IP address.
char DnsServIp[255]; //DNS server ip address.
DNS_FREE_TYPE freetype;
freetype = DnsFreeRecordList;// DnsFreeRecordListDeep;
IN_ADDR ipaddr;

status = DnsQuery(pOwnerName, //Pointer to OwnerName.
wType, //Type of the record to be queried.
DNS_QUERY_BYPASS_CACHE, // Bypasses the resolver cache on the lookup.
pSrvList, //Contains DNS server IP address.
&pDnsRecord, //Resource record that contains the response.
NULL); //Reserved for future use.
if(status) {
printf("Failed to query the host record for %s and the error is %d \n", pOwnerName, status);
} else {
ipaddr.S_un.S_addr = (pDnsRecord->Data.A.IpAddress);
printf("The IP address of the host %s is %s \n", pOwnerName,inet_ntoa(ipaddr));

// Free memory allocated for DNS records.
DnsRecordListFree(pDnsRecord, freetype);
}
LocalFree(pSrvList);
return inet_ntoa(ipaddr);
}

当我尝试编译时,出现链接器错误(为了便于阅读,我已经清理了一些错误):

gcc -g main.c dns.c -o build.exe -D WIN -lws2_32 -w
c:/<..>/mingw32/bin/ld.exe: <..>/ccRVIgMi.o: in function `Z10DNS_LookupPc':
../dns.c:17: undefined reference to `DnsQuery_A@24'
c:/<..>/mingw32/bin/ld.exe: <..>/dns.c:30: undefined reference to `DnsRecordListFree@8'
collect2.exe: error: ld returned 1 exit status

我知道为了使用 winsock2.h 编译代码,我必须将 -lws2_32 添加到我的 gcc 命令中,我猜我必须做类似的事情使用 windns.h 编译代码,但我无法在网上找到任何帮助。

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com