【发布时间】:2018-08-04 17:22:18
【问题描述】:
我正在尝试编译我在 github 上找到的一些程序。存储库位于以下 URL: [在此处输入链接描述][1]
https://github.com/iagox86/nbtool
我对 C 程序知之甚少,但是当我尝试通过以下命令使用 GCC 时,我收到错误消息。 我试过的命令是:
gcc -o dnslogger dnslogger.c
我收到以下错误:
/tmp/ccLRFQbp.o: In function `dns_callback':
dnslogger.c:(.text+0x51): undefined reference to `dns_create_from_packet'
dnslogger.c:(.text+0x5f): undefined reference to `dns_create'
dnslogger.c:(.text+0x10e): undefined reference to `dns_add_question'
dnslogger.c:(.text+0x179): undefined reference to `dns_add_answer_A'
dnslogger.c:(.text+0x1dc): undefined reference to `dns_add_answer_AAAA'
dnslogger.c:(.text+0x214): undefined reference to `dns_to_packet'
dnslogger.c:(.text+0x236): undefined reference to `udp_send'
dnslogger.c:(.text+0x260): undefined reference to `dns_create_error_string'
dnslogger.c:(.text+0x282): undefined reference to `udp_send'
dnslogger.c:(.text+0x28e): undefined reference to `safe_free'
dnslogger.c:(.text+0x29a): undefined reference to `dns_destroy'
dnslogger.c:(.text+0x2a6): undefined reference to `dns_destroy'
/tmp/ccLRFQbp.o: In function `dns_poll':
dnslogger.c:(.text+0x2d7): undefined reference to `select_group_create'
dnslogger.c:(.text+0x304): undefined reference to `select_group_add_socket'
dnslogger.c:(.text+0x321): undefined reference to `select_set_recv'
dnslogger.c:(.text+0x336): undefined reference to `select_group_do_select'
/tmp/ccLRFQbp.o: In function `cleanup':
dnslogger.c:(.text+0x36b): undefined reference to `select_group_destroy'
dnslogger.c:(.text+0x37a): undefined reference to `safe_free'
dnslogger.c:(.text+0x384): undefined reference to `print_memory'
/tmp/ccLRFQbp.o: In function `main':
dnslogger.c:(.text+0x6ed): undefined reference to `safe_malloc_internal'
dnslogger.c:(.text+0x718): undefined reference to `winsock_initialize'
dnslogger.c:(.text+0x934): undefined reference to `dns_do_test'
dnslogger.c:(.text+0xaab): undefined reference to `udp_create_socket'
dnslogger.c:(.text+0xb5f): undefined reference to `drop_privileges'
collect2: error: ld returned 1 exit status
存储库有一个 Makefile 文件,我怀疑它用于编译程序,但我不确定要在 ubuntu 上使用的确切命令,我尝试了一些命令,但在使用提供的命令时收到错误文件。 生成文件位于此处:
https://github.com/iagox86/nbtool/blob/master/Makefile
如何从 ubuntu 命令行编译这些程序?
【问题讨论】:
-
一般来说(在你链接到的 Makefile 中很清楚),从终端执行“make all”是编译 C 程序的标准。你试过吗?
-
您链接到的
makefile具有规则dnslogger: dnslogger.o buffer.o tcp.o udp.o select_group.o types.o memory.o dns.o—${CC} ${CFLAGS} -o dnslogger dnslogger.o buffer.o tcp.o udp.o select_group.o types.o memory.o dns.o ${LIBS}用于构建dnslogger。您的命令行缺少几乎所有的目标文件。 -
您说“我在使用文件中提供的命令时收到错误”。你指的是什么文件?生成文件?你是如何“使用”这些命令的?你想自己执行它们吗?你不应该那样做:makefile 是供
make程序使用的,所以你应该运行make。如果您在尝试运行make时遇到错误,请显示这些错误,我们可以帮助您。编译程序是一个复杂的过程,这就是为什么首先存在 makefile 的原因。除非在最简单的情况下,直接运行编译命令不太可能工作。
标签: c linux ubuntu makefile compilation