[问题] 在连结时出错

楼主: wei115 (ㄎㄎ)   2018-03-19 02:04:03
开发平台(Platform): (Ex: Win10, Linux, ...)
win10 + MSYS2
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
mingw
问题(Question):
我用C语言写了一个游戏
而我想挑战只用编辑器和make来完成
程式编译通过了(.o档)
但却在连结时出了问题
像这样 https://i.imgur.com/lO4mEoq.jpg
程式架构大概像这样
我在.h档中宣告了所有函数
在a.c中使用这些函数,而这些函数则定义在b.c中
而我觉得原因可能有两种
1.我对C语言不够熟悉,可能需要加些关键字告诉编译器要如何连结
2.我刚从Google学来写的make有问题
我觉得2的可能性比较大
想问问看大大们有什么看法,谢谢
喂入的资料(Input):
原始档
预期的正确结果(Expected Output):
执行档
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
补充说明(Supplement):
Makefile
CC = gcc
game: main.o snake.o draw.o scenes.o init.o linkedlist.o os_func.o sna.h
$(CC) -o game main.o snake.o draw.o scenes.o init.o linkedlist.o os_fu
nc.o
%.o: %.c sna.h
$(CC) -c $<
clean:
rm -f *.out *.exe *o
作者: Lipraxde (Lipraxde)   2018-03-19 08:24:00
有些版本的gcc在连结的时候会受到输入档案顺序的影响,前面的.o眼睛看不到后面的...不知道为什么clean 那里*o是不是要写*.o?game 那边可以写$(CC) $^ -o game.exe
作者: descent (“雄辩是银,沉默是金”)   2018-03-19 09:26:00
你有用到除了 c library 之外的其他 library 吗?
作者: carylorrk (carylorrk)   2018-03-19 10:07:00
L大说的是 link library 时才会出现的问题,可以参考https://goo.gl/A4jvfRhttps://goo.gl/K96CGp一般来说现在的 compiler 会找所有的 object files

Links booklink

Contact Us: admin [ a t ] ucptt.com