【问题标题】:How can i compile C programs with Makefile on ubuntu?如何在 ubuntu 上使用 Makefile 编译 C 程序?
【发布时间】: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


【解决方案1】:

只需运行make

git clone https://github.com/iagox86/nbtool
cd nbtool
make

您需要一些程序来编译所有内容(示例)。 (如果您的系统上缺少它们,make 会抱怨)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    • 1970-01-01
    • 2022-08-16
    • 1970-01-01
    • 2011-08-22
    相关资源
    最近更新 更多