Re: [問題] 自訂的h檔中的宣告怎麼找到cc檔的定義

看板C_and_CPP作者 (=.=)時間15年前 (2010/06/06 16:13), 編輯推噓1(106)
留言7則, 2人參與, 最新討論串2/3 (看更多)
: ※ 編輯: Aligu1009 來自: 157.22.247.53 (06/06 15:41) : 推 Bencrie:你應該先弄懂編譯與連結是怎麼回事 ... 06/06 15:46 : → Bencrie:你應該先編譯 a.cc和main.cc,然後再把它們連結起來。 06/06 15:47 : → Bencrie:make a.o ; make main.o ; g++ a.o main.o -o your_binary 06/06 15:49 : ※ 編輯: Aligu1009 來自: 157.22.247.53 (06/06 15:51) : → Aligu1009:gotcha, tks! 06/06 15:55 : → tinlans:compiler 只負責找宣告,因為識別字沒宣告就不能用。 06/06 15:57 謝謝,我已經可以成功的compile + link了 但有一點疑惑想繼續發問 假設我有 a.h, a.cc 和 main.cc a.h和a.cc分別放 myfunc() 的宣告和定義, main.cc中呼叫 myfunc() 我用 g++ -c a.cc -o a.o 得到了 a.o 用 g++ -c main.cc -o main.o 得到了 main.o 然後 g++ main.o a.o 得到 a.out 我不懂的點在於: 1. 這樣的過程中 main.cc 並不需要用到 include "a.h",那為什麼需要它? 2. 如果我在main.cc中用了include "a.h" g++可以從main.cc知道要找a.h,接著能夠 (magically) 找到 a.cc嗎? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 157.22.247.53

06/06 16:15, , 1F
1. 因為他要看到那個function宣告 2. 不能
06/06 16:15, 1F

06/06 16:17, , 2F
已經有a.o了,就算沒有include "a.h"還是知道myfunc()啊
06/06 16:17, 2F

06/06 16:18, , 3F
他在compile的時候要知道有沒有myfunc()的宣告,沒有就要
06/06 16:18, 3F

06/06 16:19, , 4F
報錯給PG,跟那個a.o一點關係都沒有
06/06 16:19, 4F

06/06 16:19, , 5F
知道有這個東西(compile)和真的去連結(link)是兩回事
06/06 16:19, 5F
我實驗的結果:在main.cc中不include "a.h" 直接 g++ main.o a.o,還是可以產生a.out

06/06 16:22, , 6F
你沒include他, g++ -c main.cc -o main.o 這步會錯
06/06 16:22, 6F

06/06 16:23, , 7F
除非你main完全沒有去call那個function
06/06 16:23, 7F
謝謝,的確不行 我稍早實驗時可能有某個環節弄錯,歪打正著的產生了a.out 現在無法再重製實驗結果了 ※ 編輯: Aligu1009 來自: 157.22.247.53 (06/06 16:37)
文章代碼(AID): #1C2rYZ8K (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1C2rYZ8K (C_and_CPP)