[問題] 請問哪裡可以學習關於外部連結的問題
翻了仿間不少的書 好像很少有書籍是介紹我想知道的(應該是我看得不夠細)
這些書上大部分都介紹一些型別語法函式庫流程控制結構類別之類的
但我想知道的是一個程式細節上是怎麼被編譯而成。
因為我現在處理的專案無法用IDE去compile...更讓我對一堆檔案間
是怎麼產生obj,lib,以至於後面生出image完全搞不清楚。
舉例來說,例如今天要產生一個叫PCH_platform的模組
裡面的組成包函了 PCH_platform.c ,這個.c檔裡面include了一個PCH_platform.h
而我在 PCH_platform.c裡面看到一隻 PCIread_byte()的function...
可是這隻.c檔裡面明明就沒有包含這隻function的定義以及宣告,.h檔裡面也沒有宣告
就可以這樣直接拿來用,請問到底是甚麼原理呢?雖然我猜可能跟lib有關
可是完全不曉得這隻.c檔是跟哪隻.lib連結的。
同樣的情形也發生在定義常數上...明明一個 PCI_REGaddr常數在.c檔跟.h檔都沒有宣告
可是卻也可以直接用~實在是完全搞不懂 (整個專案建置的環境是在cmd下nmake)
--------------------------------------------------------------------------
以前使用IDE的時候很方便,就建置個專案,把function放在不同的檔案之間要
呼叫只要把xxx.cpp,yyy.cpp都拉進專案,然後別隻檔案要用再include一個
有宣告xxx.cpp以及yyy.cpp的function之header就好,導致現在要用cmd compile就不知道
怎麼拉function了。
所以我今天又做了一個小實驗,我弄了 a.cpp,b.cpp,b.h,內容摘要方別是
a.cpp:
#include "b.h"
void main(){
int i = b(3); //使用別隻檔案的function
}
b.cpp:
int b(int bb){
return bb+2; //定義
}
b.h:
int b(int bb); //宣告
第一次編譯的時候,這三隻是在同一個專案中,理所當然地build過了
接下來我把b.cpp從專案中remove,然後build code就不過了
會出現 "無法解析的外部符號 int b()"這種問題....這就是我不懂的地方
原來的想法是: compile分成 1.產生obj 2.link成可執行檔
今天我雖然把b.cpp從專案中移除了,可是第一次build code所留下來的b.obj還在
照理說在link的階段..a.obj應該去找到b.obj裡面的int b()然後把她拉進來
形成執行檔才對的阿...為什麼編譯不會過呢?糾境~~在整個build的過程
IDE做了哪些事情?而在cmd底下我又該怎麼下命令將這三個檔案成功build起來?
那是不是說,假如我把b.cpp建成一個.lib檔,就...
1.不會有無法解析外部符號的問題 2.a.cpp不必去include b.h就可以用int b()
又假設正確的話...我又該如何把這個b.lib拉進來~讓程式在bulid的時候去找到
b.lib呢?
問題實在很長 感謝耐心看完的板友~如果有像這樣的問題的話,究竟有甚麼樣的資源
可以參考呢? 希望各位前輩們可以替小弟指點迷津 m(_ _)m
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.136.196.245
推
02/21 05:40, , 1F
02/21 05:40, 1F
→
02/21 09:11, , 2F
02/21 09:11, 2F
→
02/21 09:24, , 3F
02/21 09:24, 3F
→
02/21 09:25, , 4F
02/21 09:25, 4F
→
02/21 09:25, , 5F
02/21 09:25, 5F
→
02/21 10:11, , 6F
02/21 10:11, 6F
→
02/21 10:11, , 7F
02/21 10:11, 7F
→
02/21 10:12, , 8F
02/21 10:12, 8F
→
02/21 10:12, , 9F
02/21 10:12, 9F
→
02/21 10:32, , 10F
02/21 10:32, 10F
→
02/21 10:41, , 11F
02/21 10:41, 11F
→
02/21 10:42, , 12F
02/21 10:42, 12F
→
02/21 10:43, , 13F
02/21 10:43, 13F
→
02/21 10:43, , 14F
02/21 10:43, 14F
→
02/21 10:43, , 15F
02/21 10:43, 15F
→
02/22 00:08, , 16F
02/22 00:08, 16F
→
02/22 00:09, , 17F
02/22 00:09, 17F
→
02/22 00:10, , 18F
02/22 00:10, 18F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章