【发布时间】:2023-04-05 04:18:02
【问题描述】:
我正在尝试使用 ncurses 库制作程序,但由于某种原因,当我尝试使用我的 Makefile 进行编译时,它说 Makefile 中存在错误,并且 ncurses 中的所有函数都未定义。我正确地将库包含在 main.c 文件中,因为当我使用 gcc main.c -lncurses 进行编译时,程序正常工作并且没有给出任何错误或说任何未定义的内容。我试过弄乱Makefile,但我无法让它正常工作,有人有解决方案吗?
生成文件:
CC = gcc
CFLAGS = -Wall --std=c99 -g
LDFLAGS = -lncurses
OBJECTS = main.o
ALL: space_invaders
space_invaders: $(OBJECTS)
$(CC) $(CFLAGS) -o space_invaders $(OBJECTS)
main.o: main.c
$(CC) $(CFLAGS) -c main.c -o main.o
clean:
rm space_invaders $(OBJECTS)
输出:
gcc -Wall --std=c99 -g -o space_invaders main.o
/usr/bin/ld: main.o: 在函数main': /home/kyle/space_invaders/main.c:9: undefined reference to initscr'
/usr/bin/ld: /home/kyle/space_invaders/main.c:10: 未定义引用noecho' /usr/bin/ld: /home/kyle/space_invaders/main.c:11: undefined reference to curs_set'
/usr/bin/ld: /home/kyle/space_invaders/main.c:22: 未定义引用stdscr' /usr/bin/ld: /home/kyle/space_invaders/main.c:22: undefined reference to stdscr'
/usr/bin/ld: /home/kyle/space_invaders/main.c:22: 未定义引用stdscr' /usr/bin/ld: /home/kyle/space_invaders/main.c:22: undefined reference to stdscr'
/usr/bin/ld: /home/kyle/space_invaders/main.c:23: 未定义引用stdscr' /usr/bin/ld: /home/kyle/space_invaders/main.c:23: undefined reference to wclear'
/usr/bin/ld: /home/kyle/space_invaders/main.c:24: 未定义引用mvprintw' /usr/bin/ld: /home/kyle/space_invaders/main.c:25: undefined reference to stdscr'
/usr/bin/ld: /home/kyle/space_invaders/main.c:25: 未定义对“wrefresh”的引用
collect2:错误:ld 返回 1 个退出状态
make: *** [Makefile:7: space_invaders] 错误 1
【问题讨论】:
-
请不要将代码和文本输出作为图像发布 - reasoning。将其作为格式化文本复制到问题中。
-
makefile 定义了
LDFLAGS但从不使用它。 -
@kaylum 我会在makefile的什么地方使用它?我尝试查找它,但无法弄清楚它会在哪里使用。
-
好吧,如果您手动构建它,您在哪里添加该标志?将它放在与同一命令对应的 Makfile 中的位置。也就是说,将其添加到链接最终可执行文件的命令中。
-
@kaylum 谢谢,我把它放在那里,它现在可以正常工作了。
标签: c linux windows makefile ncurses