作者tinlans ( )
看板C_and_CPP
標題Re: [問題] 到底lib是什麼呢?
時間Thu Apr 30 02:46:56 2009
※ 引述《QQ29 (我愛阿蓉)》之銘言:
: 我沒有自己寫過lib或是dll
: 而我一直有自以為對的一個觀念就是
: .h和.cpp .cpp可以換成lib
: lib就是.cpp , 實作的包裝.... 但其實要我解釋 lib到底是什麼我也不知道
: 他先把CPP 作成lib 是把cpp檔案textfile 作了什麼事呢??
: 我試著google一下 看比較general解釋 都不太解釋我想問的這個部份
: 想請版友給點指點~~
計概課本會告訴你,
純文字的程式碼經過 compile 以後變成 object file,
把一個或多個 object files 做 linking 之後就會變成 executable file。
static lib 其實就是很多 object files 的 archive,
也就是把一堆編譯出來的 .obj (或 .o)檔封在一個檔案裡,
這樣你在 linking 的時候只要指定一個 lib 檔而不需要指定一堆 objec files。
: 然而dll更是我完全沒碰過的東西
: 我只知道我執行程式時 要把該用的dll擺好 而dll在compile time是沒有關係的..
: 也是google了一下 知識+之類的 解釋的讓我更不懂了
: 有提到什麼許多程式共用的XXXXX (不知道是什麼...)
: 那如果共用 不會造成race condition或是什麼之類的怪事情嘛?
共用 text section 並不會有什麼問題,
因為那個地方本來就不允許在 runtime 被寫入新值,
而且裡面的 code 一般會被編譯成 position independent code,
所以存取資料上也不會發生奇怪的問題。
: 一般寫程式 我就沒有碰過真的需要自己寫dll這件是 導致我真的對這一無所知
: 只知道她好像是run time程式會去跟他作某些事情....
: 請大家給一點正確的觀念好嘛.....
: 是什麼必要 會需要去寫dll呢?
可以共用 text section 的意義當然就是省 memory,
另外一個就是為了彈性,
不過怎麼做到彈性這點就真的說來話長了,
建議你自己動手玩過 DLL 以後再來問進一步的問題。
物件導向的技術也能用在 DLL 上,
比方說 header 只有 base class,
dervied classes 被實作在 DLL 內,
設計核心部分的人只需要以多型的方式利用物件即可,
元件導向的程式開發模式也常會用這種技巧;
不過你想在 Windows 上玩這招可能還會遇上一些問題,
特別是跨 DLL 用 new/delete 可能會有事,
但現在講這些可能也太早了。
--
Ling-hua Tseng (uranus@tinlans.org)
Department of Computer Science, National Tsing-Hua University
Interesting: C++, Compiler, PL/PD, OS, VM, Large-scale software design
Researching: Software pipelining for VLIW architectures
Homepage:
https://www.tinlans.org
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.160.115.183
推 VictorTom:小弟我才他google到的.dll共用應該只是解釋一般人使用上 04/30 03:03
→ VictorTom:.dll的運作看起來是共用的, 而不是code/binary的內容@@" 04/30 03:03
推 QQ29:請教一下 您說static lib 其實就是很多object files的archive 04/30 03:18
→ QQ29:意思是說不是一個.cpp變成一個lib而是可以全部變成一個lib? 04/30 03:19
→ QQ29:另外看了一下您的網頁....您六歲就開始接觸程式= =太神了吧 04/30 03:22
→ sunneo:tinlans等級頗高的 04/30 04:01
→ MOONRAKER:幾歲開始不重要啦 以前因為電腦沒什麼好玩 所以要玩電腦 04/30 04:42
→ MOONRAKER:就一定要寫程式 重點是後來怎樣 這可不是我在酸 04/30 04:43
→ MOONRAKER:我小時候也玩某種仿水果電腦 可是現在混得太爛所以沒啥 04/30 04:45
→ MOONRAKER:好講的 -_- 04/30 04:45
→ sunneo:我小時候也是用qbas/etbas寫了簡易的戰車遊戲 04/30 04:47
→ sunneo:不過程式碼醜斃了 全都擠在同一個bas 還goto了一堆 04/30 04:48
→ sunneo:最後就連維護都很懶了 04/30 04:48
→ sunneo:csse的`怎麼知道適不適合走程式這條路`的答案是維持的動力 04/30 04:50
→ sunneo:不過看最近新聞...國小作機器人 還有以前某個寫ga組合midi 04/30 04:52
→ sunneo:倒是蠻令人驚奇的... 04/30 04:52
推 sunneo:資料共用在nt以上應該都不會是預設 95/98才是 04/30 05:01
推 VictorTom:國小寫控制機器人那些似乎是有現成的套件的樣子喔@_@" 04/30 10:28
→ VictorTom:不過小小年紀就可以把邏輯/控制搞清楚實作出來也不簡單. 04/30 10:29
→ VictorTom:話說, QB裡不是本來很多地方就在goto的嗎?_? 04/30 10:29
→ MOONRAKER:QB有比較decent的function/sub了 ETBAS是GWBASIC那一期 04/30 10:54
→ MOONRAKER:的,沒有這些近代的program unit,不是goto就要靠gosub 04/30 10:54
推 VictorTom:啊對不起, 我搞錯了, 我說的應該是BASIC, 那個還可以自 04/30 13:13
→ VictorTom:己打行號: 10 xxxx 20 xxxx 30 xxxx 的那個Orz 04/30 13:14
→ tinlans:每個 .cpp 可以各自變成 .obj,這些 .obj 可收成一個 lib 05/01 14:46