線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1747
推到 Plurk!
推到 Facebook!

如何編譯獨立運作exe

尚未結案
khumash
一般會員


發表:8
回覆:4
積分:2
註冊:2004-06-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-05 10:00:35 IP:211.76.xxx.xxx 未訂閱
請問各位, 我用BCB6.0 想把application project編譯成exe檔 可以考到別的電腦獨立執行, 需要做哪些設定. PS.我有外掛的DLL檔和LIB檔 目前只知道要把run time library給取消 (不過不知道怎麼把DLL的關連LIB一起包在EXE中) 請問各位有什麼相關文章嗎? 我不太清楚要用什麼關鍵字搜尋. THanks~~
Windyboy
版主


發表:7
回覆:119
積分:210
註冊:2002-11-07

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-05 10:27:19 IP:220.130.xxx.xxx 未訂閱
Hi khumash: 先參考這一篇文章, http://delphi.ktop.com.tw/topic.php?TOPIC_ID=21675 如果還有問題再來發問^^ -------------------------- ~天下本無事 庸人自擾之~
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-05 10:53:55 IP:221.169.xxx.xxx 未訂閱
如果你都用內建的 dll & lib & package 的話,可以參考Windyboy 所說的那一個方法。 如果是像您的 PS 所說”PS.我有外掛的DLL檔和LIB檔”那就要看您的 dll & lib 有沒有提供讓您靜態連結的方式了。 如果有才可以。如果沒有。那你就要去看怎麼打包你的軟體了。^_^
khumash
一般會員


發表:8
回覆:4
積分:2
註冊:2004-06-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-10-06 00:01:12 IP:211.76.xxx.xxx 未訂閱
我參考站內多篇關於 standalone, depends的文章 目前的理解如下: 我有一個外掛的DLL, 應該是使用靜態連結的方式 ,在主程式.cpp include 同名.h檔, 也在project中加入 同名.lib 這樣的方式編譯出的exe檔, 如果在別的電腦執行, 需要連同DLL一起複製.    但是 暗黑破壞神 您的話讓我有些疑惑, 難道我能夠把外掛的DLL一起包到 執行檔中嗎?? Thanks
如果是像您的 PS 所說”PS.我有外掛的DLL檔和LIB檔”那就要看您的 dll & lib 有沒有提供讓您靜態連結的方式了。
如果有才可以。如果沒有。那你就要去看怎麼打包你的軟體了。^_^
Windyboy
版主


發表:7
回覆:119
積分:210
註冊:2002-11-07

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-10-06 00:09:50 IP:219.84.xxx.xxx 未訂閱
我也蠻好奇的, 我倒是沒想過把DLL包在EXE裡, 一般的做法都是使用到DLL內的功能, 就把該DLL跟著EXE一起做成Install File, 就是使用該執行檔時, DLL一定要存在才行, 這是我對Dynamic Link Library的了解, 總覺得這樣才叫DLL嘛^___^ 做成DLL後再包到EXE內的想法真的是想都沒想過耶..呵呵 -------------------------- ~天下本無事 庸人自擾之~
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-10-06 09:42:48 IP:221.169.xxx.xxx 未訂閱
我們回想DLL的歷史 是不是因為 在一個作業系統中,同一個 Lib 被多次載入到 Memory 中 而造成 Memory 的浪費。所以。產生了 DLL 這種東西? ex: program1 用了 printf, program2 也用了 printf. 那是不是會載入兩次 printf????? (當然指的是多工的作業系統。不是 DOS 那種系統啦。) 所以,就有一堆吃飯閒著沒事做的人。想法子把 printf 這樣的東東做成了 "DLL" 這一類的東西。 當 program1 要用到 printf 時,它就問一下。。。。喂。系統中有沒有已經叫用了? 有沒有在記憶體中?如果有,就直接使用記憶體中的。就不去載入。 如果沒有。就自行載入使用。 這就是它的原理。(當然其中還有很多機制啦。就略過了) 而DLL在幾年前也有過爭議。它是否有存在的必要。 想想。如果你手上的東西是個監視系統好了。 一個系統,就只會跑這個東西一次。那你要它”動態”幹嘛?浪費時間跟精神。 (DLL的載入要管理的)只是讓主程式看起來小一點而已。 所以,有時候還不如只用靜態的 lib. >目前的理解如下: 我有一個外掛的DLL, 應該是使用靜態連結的方式 >,在主程式.cpp include 同名.h檔, 也在project中加入 同名.lib >這樣的方式編譯出的exe檔, 如果在別的電腦執行, 需要連同DLL一起複製. 而你所了解的,有部份錯了。 我們要使用 DLL 必須知道那些個函數的”進入點” 也就是,我要用的函數,它的”指標(位址)”在那裏? 然後我們才可以用。 通當,我們在使用 DLL 時,會在 Link 時給它一個很小很小的 .lib 的東東。 你可以用 tlib 這種工具。把它叫出 list 來看。基本上。它只是一些 pointer 它只是用來說明那些 function call 的位址用的。它實際上,並不含有 function call 的”執行碼”。所以,這個不叫做”靜態連結”。這個還是動態連結。 因為在使用時。它還是會把 XXX.DLL 載入 memory 中。 而我說的靜態 lib 是我們平常用的那種 .lib 是有 code 在裏面的那一種。 那種在連結之後,就可以不用帶著 .DLL 出門了。 像我買的 async pro 的 com port 元件。 它就有幾種型態。一個是用 package,這個要出門就要帶著它的東東出去。 一個就不用 package 的方式,而是直接 link 它的靜態 lib, 這樣我的程式會 變很肥。可是。出門時,只要帶著一支程式就可以了。 這是我說的靜態連結的意思。 而我說要你去看怎麼打包。是因為如果這個廠商沒有提供靜態的 .lib 給你。 那你就只能用動態方式。那你就只好主程式加.dll 一起出了。 那這就要去研究那個 死 installshield.....(有沒有拼錯^_^ 因為我不喜歡 用這麼麻煩的東西給客戶) 看你怎麼去打包了。 有空你去玩玩純 DOS 的 .C, 跟 .CPP 然後用 tlib 去看看它們編出來的東東。 你就可以發現它們的命名方式,你會更了解 compiler 的運作方式。 如果你再更深入就會發現很多功能會這樣做。除了 compiler 的規格之外。 是作業系統給的限制。^_^
系統時間:2024-06-29 15:22:03
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!