作者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://www.ptt.cc/bbs/C_and_CPP/M.1521396247.A.741.html
→ Lipraxde: 有些版本的gcc在連結的時候會受到輸入檔案順序的影響,03/19 08:24
→ Lipraxde: 前面的.o眼睛看不到後面的...不知道為什麼03/19 08:24
→ Lipraxde: clean 那裡*o是不是要寫*.o?03/19 08:24
→ Lipraxde: game 那邊可以寫$(CC) $^ -o game.exe03/19 08:24
好的,謝謝,我回去試試看
推 descent: 你有用到除了 c library 之外的其他 library 嗎?03/19 09:26
有,os_func.c 裡有用到conio.h
※ 編輯: wei115 (59.126.109.77), 03/19/2018 09:43:14
→ carylorrk: L大說的是 link library 時才會出現的問題,可以參考 03/19 10:07
→ carylorrk: 一般來說現在的 compiler 會找所有的 object files 03/19 10:17
恩,結果是我耍蠢了,函式定義的名稱和宣告的不一樣,結果當然會出錯
修改之後就正常了
謝謝大家,浪費各位的時間了...
※ 編輯: wei115 (59.126.109.77), 03/20/2018 02:15:02