作者Aligu1009 (=.=)
看板C_and_CPP
標題Re: [問題] 自訂的h檔中的宣告怎麼找到cc檔的定義
時間Sun Jun 6 16:13:20 2010
: ※ 編輯: 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
推 nowar100:1. 因為他要看到那個function宣告 2. 不能 06/06 16:15
→ Aligu1009:已經有a.o了,就算沒有include "a.h"還是知道myfunc()啊 06/06 16:17
→ nowar100:他在compile的時候要知道有沒有myfunc()的宣告,沒有就要 06/06 16:18
→ nowar100:報錯給PG,跟那個a.o一點關係都沒有 06/06 16:19
→ nowar100:知道有這個東西(compile)和真的去連結(link)是兩回事 06/06 16:19
我實驗的結果:在main.cc中不include "a.h"
直接 g++ main.o a.o,還是可以產生a.out
→ nowar100:你沒include他, g++ -c main.cc -o main.o 這步會錯 06/06 16:22
→ nowar100:除非你main完全沒有去call那個function 06/06 16:23
謝謝,的確不行
我稍早實驗時可能有某個環節弄錯,歪打正著的產生了a.out
現在無法再重製實驗結果了
※ 編輯: Aligu1009 來自: 157.22.247.53 (06/06 16:37)