Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在ubuntu上用Makefile编译C程序?_C_Linux_Ubuntu_Makefile_Compilation - Fatal编程技术网

如何在ubuntu上用Makefile编译C程序?

如何在ubuntu上用Makefile编译C程序?,c,linux,ubuntu,makefile,compilation,C,Linux,Ubuntu,Makefile,Compilation,我正在尝试编译我在github上找到的一些程序。存储库位于以下URL: [在此处输入链接说明][1] 我对C程序知之甚少,但是当我尝试使用GCC和下面的命令时,我收到了错误。 我尝试过的命令是: gcc -o dnslogger dnslogger.c 我收到以下错误: /tmp/ccLRFQbp.o: In function `dns_callback': dnslogger.c:(.text+0x51): undefined reference to `dns_create_from_p

我正在尝试编译我在github上找到的一些程序。存储库位于以下URL: [在此处输入链接说明][1]

我对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上使用的确切命令,我尝试了一些命令,但在使用文件中提供的命令时收到错误。 makefile位于以下位置:


如何从ubuntu命令行编译这些程序?

只需运行
make

git clone https://github.com/iagox86/nbtool
cd nbtool
make
不过,您需要一些程序来编译所有内容(示例)。 (如果您的系统中缺少它们,make将进行投诉)

如果您对Makefile本身更感兴趣,可以使用注释中的链接或阅读特定文档
(我选择了Gnu Make,因为标签明确指定了ubuntu)

只要运行
Make

git clone https://github.com/iagox86/nbtool
cd nbtool
make
不过,您需要一些程序来编译所有内容(示例)。 (如果您的系统中缺少它们,make将进行投诉)

如果您对Makefile本身更感兴趣,可以使用注释中的链接或阅读特定文档
(我选择了Gnu Make,因为标记明确指定了ubuntu)

一般来说(正如您链接到的Make文件中所明确的),从终端执行“全部生成”是编译C程序的标准。你试过了吗?你链接到的
makefile
有规则
dnslogger:dnslogger.o buffer.o tcp.o udp.o select_group.o types.o memory.o dns.o
-
${CC}${CFLAGS}-o dnslogger.o buffer.o tcp.o udp.o select_group.o types.o memory.o dns.o${LIBS}
用于构建
dnslogger。您的命令行缺少几乎所有的对象文件。您说“我在使用文件中提供的命令时收到错误”。你指的是什么文件?生成文件?你是如何“使用”这些命令的?你是想亲自执行吗?您不应该这样做:makefile是由
make
程序使用的,因此您应该运行
make
。如果您在尝试运行
make
时遇到错误,请显示这些错误,我们可以帮助您。编译程序是一个复杂的过程,这就是为什么makefiles首先存在的原因。除非在最简单的情况下,直接运行编译命令是不可能的。这应该是一个很好的起点-一般来说(正如链接到的Makefile中所清楚的),从终端执行“全部生成”是编译C程序的标准。你试过了吗?你链接到的
makefile
有规则
dnslogger:dnslogger.o buffer.o tcp.o udp.o select_group.o types.o memory.o dns.o
-
${CC}${CFLAGS}-o dnslogger.o buffer.o tcp.o udp.o select_group.o types.o memory.o dns.o${LIBS}
用于构建
dnslogger。您的命令行缺少几乎所有的对象文件。您说“我在使用文件中提供的命令时收到错误”。你指的是什么文件?生成文件?你是如何“使用”这些命令的?你是想亲自执行吗?您不应该这样做:makefile是由
make
程序使用的,因此您应该运行
make
。如果您在尝试运行
make
时遇到错误,请显示这些错误,我们可以帮助您。编译程序是一个复杂的过程,这就是为什么makefiles首先存在的原因。除非在最简单的情况下,直接运行compile命令是不可能工作的。这应该是一个很好的开始-