Re: [問題] 產生的執行檔無法開啟指定檔案
我簡單敘述一下這是什麼情況好了,下面三個線索都是原 po 自己敘述的
線索一: code寫好了成功編譯,按下IDE的"build and run"也沒問題可以執行
線索二:
→ donvito:cmd window很快的的閃過一句 "輸入的檔案錯誤" 就關掉了 12/31 23:34
→ donvito:就只有這樣而已 大概0.1秒 簡直考驗我的動態視力 12/31 23:35
線索三:
我把release底下的exe檔複製貼上到project所在的資料夾層就可以執行了
很合理可以猜測, donvito 對於檔案路徑特性並不熟悉。
假設專案為 D:\HelloWorld,裡面放了 demo.bmp
然後在 src 裡面寫了
FILE * fp = fopen("demo.bmp", "rb");
if(fp==NULL) {
printf("Open fail\n");
return EXIT_FAILURE;
}
/* what ever... */
fclose(fp);
return EXIT_SUCCESS;
然後由於 demo.bmp 只存在於 D:\HelloWorld 裡面,所以開啟會正常,
再加上 Code::Blocks 在結束的時候會自動加上 pause, 計時, 所以看得到正常結果。
接下來 donvito 又跑到 D:\HelloWorld\bin\Release 裡面的 HelloWorld.exe 執行,
這時候 HelloWorld.exe 在當前路徑找不到 demo.bmp ,所以噴出在 code 裡面寫的
"Open fail" 字句,也由於該判斷沒加上 pause 等任何暫停指令,
所以看起來就在考動態視力。
言歸正傳..
※ 引述《donvito (CryFather)》之銘言:
: → purincess:current directory不對? 01/01 00:44
: 您猜對了...
: 我把release底下的exe檔複製貼上到project所在的資料夾層就可以執行了...
: (這個project含有自己寫的header)
這是因為,當你寫下 fopen("demo.bmp", "rb"); 的時候,
會到「執行檔的當前路徑」去搜尋 demo.bmp 這個檔案,
所以你第二次怎樣都搜尋不到。
那為什麼在 Code::Blocks ide 下可以找到呢?
其實任何 IDE 都找得到,在用 IDE 開發的時候,
他會把環境設定為專案本身的目錄,以上例而言,也就是你用 IDE 時,
會到 D:\HelloWorld 裡面找 demo.bmp;
但退出 IDE ,單獨用 .exe 執行時候,就會在「和 exe 同一目錄」底下搜尋 demo.bmp
: 小怒伯我去年(code陪我跨年...有點淒涼)才踏入程式領域
: 我猜是code blocks不是把.o全部寫成一個exe而是先存放在obj\release
這句話對,正常而言,一個 .c(.cpp) 會配合一個 .o,這個動作叫「編譯 compile 」。
( 當然我跳過了前置處理這過程 )
: 執行的時候才去從當前directory底下obj\release找出來link在一起?
這句話不對,這個動作是「連結」做的事,從數個 .o 產生一個 .exe,
叫做連結 (link),你也可以只連結產生一個執行檔,但不去執行它。
: (所以我如果想要輸出一個可以直接執行的exe要調整什麼設定呢@@?)
這裡的「一個可以直接執行的 exe 」必須定義一下,如果你是想要連那個 demo.bmp
都不要有的話,不可能!這樣你的程式就不該有 fopen 之類型的動作。
然後推文裡說的「靜態連結」,指的是,有些情況是,你的執行檔、輸入檔都有,
在你的電腦裡面都可以執行,但把這份執行檔、輸入檔拿到別人電腦就不能執行,
這時候大多是因為,你的執行檔需要「某些動態連結檔 (dll)」,但別人的電腦裡
面沒有!
你可以有兩種解決方式,一種是在別人的電腦裡面安裝這些動態連結檔,
這樣你的執行檔就可以執行,而且執行檔會比較小;
另一種方式是在編譯的時候,對編譯器下指令,選擇「靜態連結」,這樣
執行檔會比較大,但可以保證在沒有「某些動態連結檔」的情況下,別人
的電腦也可以正常執行。
: 關於這方面有沒有前輩可以推薦什麼書? (原文的也無所謂
: 感謝!
路徑的問題
http://edisonx.pixnet.net/blog/post/89099733 1. 絕對 / 相對路徑
編譯器 / IDE 的問題
□ [分享] Windows 下架構 C/C++ 簡易 IDE #1EU6-1Ld (C_and_CPP)
書 : 程式設計師的自我修養 http://ppt.cc/iSL(
----------------------
這裡我要補充一下,我沒記錯的話,
gcc 系列的 (Dev-Cpp , Code::Blocks) 似乎是不用特定選靜態連結,
我記得以前開發給客戶時,用 gcc 送的最後也沒特別指定,client 就可直接執行,
( 所以其實是 IDE 預設是用 static link ? ) 有誤的話也請不吝更正。
--
~ 這輩子與神手無緣
我只好當神獸了 ~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 180.177.76.161
→
01/01 22:33, , 1F
01/01 22:33, 1F
→
01/01 22:33, , 2F
01/01 22:33, 2F
→
01/01 22:34, , 3F
01/01 22:34, 3F
推 suhorng:?? 所以之前說 "C::B" 產生的 .o 副檔名, 不是動態連結? 01/01 22:34
→
01/01 22:35, , 4F
01/01 22:35, 4F
→
01/01 22:34, , 5F
01/01 22:34, 5F
→
01/01 22:35, , 6F
01/01 22:35, 6F
→
01/01 22:36, , 7F
01/01 22:36, 7F
→
01/01 22:36, , 8F
01/01 22:36, 8F
嗯,正確的說我猜應該也是下載 Code::Blocks-with-MinGW,object 是 .o 。
包圖檔到同一檔案的話... 我想到的是全塞到 stack ,不過好像..
是蠻想見識一下就是了。
→
01/01 22:40, , 9F
01/01 22:40, 9F
→
01/01 22:41, , 10F
01/01 22:41, 10F
推
01/01 22:41, , 11F
01/01 22:41, 11F
→
01/01 22:42, , 12F
01/01 22:42, 12F
可能我猜錯,抱歉。若真如此,我想放 code 真較佳,另外我覺得可以先搜一下
有沒有在 source code 裡出現這句 「輸入的檔案錯誤」,我怎麼看都不認為,
這串中文字會是 compiler 會跳出來的東西。
總之我實在覺得,linker 機率真的不大,特別都是在你的電腦裡面執行的。
** 推文放齊 ***
※ 編輯: EdisonX 來自: 180.177.76.161 (01/01 22:51)
→
01/01 22:47, , 13F
01/01 22:47, 13F

→
01/01 22:48, , 14F
01/01 22:48, 14F
→
01/01 22:49, , 15F
01/01 22:49, 15F
→
01/01 22:51, , 16F
01/01 22:51, 16F
推
01/01 22:53, , 17F
01/01 22:53, 17F
→
01/01 22:54, , 18F
01/01 22:54, 18F
→
01/01 22:55, , 19F
01/01 22:55, 19F
推
01/01 22:55, , 20F
01/01 22:55, 20F
→
01/01 22:56, , 21F
01/01 22:56, 21F
→
01/01 22:57, , 22F
01/01 22:57, 22F
→
01/01 23:03, , 23F
01/01 23:03, 23F
→
01/01 23:03, , 24F
01/01 23:03, 24F
→
01/01 23:03, , 25F
01/01 23:03, 25F
→
01/01 23:04, , 26F
01/01 23:04, 26F
→
01/01 23:04, , 27F
01/01 23:04, 27F
→
01/01 23:05, , 28F
01/01 23:05, 28F
推
01/01 23:06, , 29F
01/01 23:06, 29F
→
01/01 23:09, , 30F
01/01 23:09, 30F
→
01/01 23:09, , 31F
01/01 23:09, 31F
→
01/01 23:09, , 32F
01/01 23:09, 32F
→
01/01 23:10, , 33F
01/01 23:10, 33F
→
01/01 23:10, , 34F
01/01 23:10, 34F
→
01/01 23:10, , 35F
01/01 23:10, 35F
→
01/01 23:17, , 36F
01/01 23:17, 36F
推
01/01 23:51, , 37F
01/01 23:51, 37F
推
01/03 21:06, , 38F
01/03 21:06, 38F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章