作者wei115 (ㄎㄎ)
看板C_and_CPP
标题[问题] 在连结时出错
时间Mon Mar 19 02:04:03 2018
开发平台(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
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 59.126.109.77
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1521396247.A.741.html
1F:→ Lipraxde: 有些版本的gcc在连结的时候会受到输入档案顺序的影响,03/19 08:24
2F:→ Lipraxde: 前面的.o眼睛看不到後面的...不知道为什麽03/19 08:24
3F:→ Lipraxde: clean 那里*o是不是要写*.o?03/19 08:24
4F:→ Lipraxde: game 那边可以写$(CC) $^ -o game.exe03/19 08:24
好的,谢谢,我回去试试看
5F:推 descent: 你有用到除了 c library 之外的其他 library 吗?03/19 09:26
有,os_func.c 里有用到conio.h
※ 编辑: wei115 (59.126.109.77), 03/19/2018 09:43:14
6F:→ carylorrk: L大说的是 link library 时才会出现的问题,可以参考 03/19 10:07
8F:→ carylorrk: 一般来说现在的 compiler 会找所有的 object files 03/19 10:17
恩,结果是我耍蠢了,函式定义的名称和宣告的不一样,结果当然会出错
修改之後就正常了
谢谢大家,浪费各位的时间了...
※ 编辑: wei115 (59.126.109.77), 03/20/2018 02:15:02