【问题标题】:'linker' input unused [-Wunused-command-line-argument]“链接器”输入未使用 [-Wunused-command-line-argument]
【发布时间】:2020-11-24 17:18:14
【问题描述】:

我在运行 makefile 时遇到问题。问题是在运行 makefile 后出现错误

'linker' 输入未使用的 [-Wunused-command-line-argument]

错误截图:

此外,当我使用带有文件名的 make 命令时,这些命令运行良好,没有任何问题,并显示消息 file.o 是最新的,但是在 venting.o 和 venting 处提示错误

代码:

#declaring .PHONY rules
.PHONY: clean

#variable defined for -Wall -Wextra
CFLAGS=-Wall -Wextra

#rule to build the executable program venting from object file
venting: venting.o
    gcc $(CFLAGS) -o venting venting.o

#list objectable file is created with the following rules.
list.o: list.c list.h
    gcc $(CFLAGS) -c list.c

#list-adders objectable file is created with the following rules.
list-adders.o: list-adders.c list.h
    gcc $(CFLAGS) -c list-adders.c

#vents objectable file is created with the following rules.
vents.o: vents.c list.h vents.h
    gcc $(CFLAGS) -c vents.c

#venting.o objectable file is created with the following rules.
venting.o: list.o list-adders.o vents.o
    gcc $(CFLAGS) -c list.o list-adders.o vents.o

#rule to remove all build targets and rebuild project from the beginning.
clean:
    rm -f *.o venting

【问题讨论】:

    标签: c makefile clang


    【解决方案1】:
    venting.o: list.o list-adders.o vents.o
        gcc $(CFLAGS) -c list.o list-adders.o vents.o
    

    这是获取目标文件并将其传递给gcc -c(即仅编译,无链接)。由于没有进行链接,因此任何只会传递给链接器的输入文件在这里都不会被处理,因此前端驱动程序会假定它们被错误地列出。

    【讨论】:

      【解决方案2】:

      提问时,请提供您得到的准确错误输出,而不是转述的描述。另外,请显示 make 调用的导致错误的命令。

      不可能从一堆其他.o 文件中构造一个“大”.o 文件。这不是编译器可以做的事情。

      所以这条规则:

      venting.o: list.o list-adders.o vents.o
           gcc $(CFLAGS) -c list.o list-adders.o vents.o
      

      无法工作。

      【讨论】:

      • ld -r 可以做到这一点,所以理论上你可以在这里使用gcc -Wl,-r -o venting.o list.o list-adders.o vents.o——但这不太可能是受支持的用例,并且会遇到启动代码和构造函数解析的问题。跨度>
      猜你喜欢
      • 1970-01-01
      • 2014-10-24
      • 2014-06-02
      • 2014-05-07
      • 2014-11-24
      • 1970-01-01
      • 2014-05-26
      • 2022-01-09
      • 1970-01-01
      相关资源
      最近更新 更多