[問題] 遇到神奇的Visual C++的Release的問題

看板C_and_CPP (C/C++)作者 (小勇)時間12年前 (2013/09/18 01:50), 編輯推噓0(0050)
留言50則, 3人參與, 最新討論串1/1
我寫的一個程式架構大概是這樣 -Main\ |Main.exe -Res |res1.txt |res2.txt 我在程式中都是用相對路徑去寫 事實上程式也順利的讀到檔案 而我把我的程式用WinRAR去壓成自解檔 解壓縮路徑為C:\ 到別台電腦使用後也是正常 可是當我朋友把自解檔解壓縮路徑改了後 在用某個功能的時候就一定會當掉了 後來我又好奇了一下 我把正常沒有改過解壓縮路徑下的Main.exe改成Main2.exe沒想到竟然也當掉 這是什麼原因壓??? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 113.61.160.43

09/18 01:52, , 1F
解壓路徑有空白、中文、特殊符號等你的程式不支援的字元
09/18 01:52, 1F

09/18 02:04, , 2F
不過我把正常可以執行的路徑下的程式檔改了名子後也當掉
09/18 02:04, 2F

09/18 02:04, , 3F
這種情況下也算是解壓縮路徑問題嗎??
09/18 02:04, 3F

09/18 02:18, , 4F
而且我覺得最神奇的是只有在特定功能下才這樣
09/18 02:18, 4F

09/18 02:18, , 5F
期他功能有沒有改路徑都正常值型
09/18 02:18, 5F

09/18 02:19, , 6F
那你說的出槌的特定功能是什麼?
09/18 02:19, 6F

09/18 02:31, , 7F
隨機出題目
09/18 02:31, 7F

09/18 02:32, , 8F
來源是res2.txt
09/18 02:32, 8F

09/18 02:40, , 9F
所以程式是可以正常執行的,那出錯的function call是哪一
09/18 02:40, 9F

09/18 02:40, , 10F
個有找出來嗎?
09/18 02:40, 10F

09/18 02:42, , 11F
我在用VC執行的時候是正常的
09/18 02:42, 11F

09/18 02:42, , 12F
你沒有做error checking嗎...
09/18 02:42, 12F

09/18 02:43, , 13F
但是直接去點Release下的檔案就錯了錯誤類型APPCRASH
09/18 02:43, 13F

09/18 02:45, , 14F
這個作業系統有關嗎?我在XP上好像都正常
09/18 02:45, 14F

09/18 02:48, , 15F
先別說這個了,你聽過error checking嗎?
09/18 02:48, 15F

09/18 02:50, , 16F
我有點懷疑是manifest的問題,但你講得不清不楚無法判斷
09/18 02:50, 16F

09/18 02:52, , 17F
不太清楚耶是指try catch?
09/18 02:52, 17F

09/18 02:55, , 18F
有些是try-catch有些不是,MSDN會講錯誤時是什麼反應
09/18 02:55, 18F

09/18 02:56, , 19F
我只有做Try Catch...
09/18 02:56, 19F

09/18 02:57, , 20F
我剛剛把相容性改成XP結果可以執行了 可是我不知道為啥= =
09/18 02:57, 20F

09/18 02:59, , 21F
你在目標作業系統上compile看看
09/18 02:59, 21F

09/18 03:03, , 22F
發現原因好像是電腦位元的問題 雖然編譯器是用32api架構
09/18 03:03, 22F

09/18 03:04, , 23F
你的compiler是不是VS2005或VS2008
09/18 03:04, 23F

09/18 03:04, , 24F
所以在編譯器上已32x去直但如果直接去點EXE檔則會用系統
09/18 03:04, 24F

09/18 03:05, , 25F
的位元的樣子 因為我的電腦是64x....
09/18 03:05, 25F

09/18 03:05, , 26F
VS2008....
09/18 03:05, 26F

09/18 03:06, , 27F
你這瞎猜有點瞎... 我就說是 manifest
09/18 03:06, 27F

09/18 03:13, , 28F
把程式庫都改成靜態連結試試看
09/18 03:13, 28F

09/18 03:15, , 29F
manifest是什麼壓...
09/18 03:15, 29F

09/18 03:25, , 30F
可以了耶..這是為啥麼壓=口=
09/18 03:25, 30F

09/18 03:25, , 31F
仇結得太深一時也不知道該從何說起
09/18 03:25, 31F

09/18 03:25, , 32F
總之先謝謝大大><(跪)
09/18 03:25, 32F

09/18 03:26, , 33F
總之會造成不同版本作業系統甚至同一個版本的作業系統
09/18 03:26, 33F

09/18 03:26, , 34F
一般來說發給使用者的程式都是用靜態連結?
09/18 03:26, 34F

09/18 03:27, , 35F
出現連結錯程式庫的問題,VS2010以後就唾棄manifest了
09/18 03:27, 35F

09/18 03:28, , 36F
靜態連結只是要避開manifest的問題,正常來說該把manifest
09/18 03:28, 36F

09/18 03:28, , 37F
寫對才是正解,問題是要寫到對也很費手腳
09/18 03:28, 37F

09/18 03:29, , 38F
一樣是 32-bit XP, A電腦compile的就硬是不能到B電腦跑
09/18 03:29, 38F

09/18 03:30, , 39F
怎麼說?VS2010後就布用注意這個了?
09/18 03:30, 39F

09/18 03:37, , 40F
VS2010改用和Linux一樣的方法來分辨動態程式庫版本
09/18 03:37, 40F

09/18 03:38, , 41F
也就是直接把版本寫在.dll檔名上,不再使用兩光manifest了
09/18 03:38, 41F

09/18 03:39, , 42F
雖然對我來說還是好深奧不過再次謝謝你了><
09/18 03:39, 42F

09/18 03:46, , 43F
其實很多online game的主程式有一模一樣的問題 XD
09/18 03:46, 43F

09/18 03:52, , 44F
看來我要找個時間研究一下LIB 和 DLL了...
09/18 03:52, 44F

09/18 03:53, , 45F
也難怪我第一次拿到別的電腦時一直被說缺XXX.dll
09/18 03:53, 45F

09/18 03:53, , 46F
可能是跟我本機電腦的DLL版本不同吧 結果我把我的DLL都放
09/18 03:53, 46F

09/18 03:54, , 47F
到跟我程式一樣的目錄不過這做法是錯的吧...
09/18 03:54, 47F

09/18 08:24, , 48F
如果是manifest的問題的話 在目標電腦裝vcredist
09/18 08:24, 48F

09/18 08:26, , 49F
09/18 08:26, 49F

09/18 08:26, , 50F
兩個都裝也沒關係 錯的那個沒作用而已
09/18 08:26, 50F
文章代碼(AID): #1IE9PtOz (C_and_CPP)
文章代碼(AID): #1IE9PtOz (C_and_CPP)