看板 C_and_CPP 關於我們 聯絡資訊
: ※ 編輯: 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)