【发布时间】:2018-05-25 22:43:40
【问题描述】:
我刚刚开始学习 makefile 文件。我创建了一个由两个函数组成的程序,并希望使用 makefile 将它们组合在一起。这是我的文件:
#Makefile
all: main
main: main.o find_root.o
clang -o main main.o find_root.o
main.o: main.c
clang -c -Wall --pedantic -std=c11 main.c -lm
find_root.o: find_root.c
clang -c -Wall --pedantic -std=c11 find_root.c -lm
clean: rm -f main *.o*
但是,当我运行它时,我收到一个错误 - “未定义对 cos 的引用”。我在我的程序中使用余弦函数,但我已经将库链接到这两个文件的编译。我也考虑在第一个 clang 选项中添加“-lm”。这不会导致任何错误,但它会发出警告 - 说“-lm链接器未使用”。我应该在我的文件中更改什么?
【问题讨论】:
-
在创建目标文件时不链接库,而是在创建(和链接)可执行文件时。
-
删除所有
-lms,然后将clang -o main main.o find_root.o更改为clang -lm -o main main.o find_root.o。 -
@MichaelWalz 我不确定clang,但对于某些链接器前端,您需要将
-lm选项放在.o文件之后,如下所示:clang -o main main.o find_root.o -lm。跨度> -
Makefile 中的
clean:规则有错误。它当前具有目标依赖项应该去的规则的命令部分。将rm命令移到下一行,缩进,以修复它。