作者bdvstg ( bdvstg)
看板C_and_CPP
標題Re: [問題] exe檔無法發佈到其他電腦
時間Sat Sep 28 20:42:04 2013
※ 引述《rockwalking (技安)》之銘言:
: 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: VC++2010 professional with QT 1.2.2 add-in;
: 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
: QT 5.1.0; OpenCV
: 問題(Question):
: 我compile(Release)的exe檔在其他電腦雙擊沒有反應;
: 網路上及爬文的方法還是不行
: 目標電腦有裝VC++2010
: .dll有附上
: MFC選用靜態資料庫
: 感謝
我之前的案例跟你差不多
後來請對方(Target)灌Qt並用對方的Qt的dll檔取代我給的之後就可以Run了
不過總不能每次都要Target灌個上G的Qt吧...
所以就開始找原因了
Dependency Walker 也用過.....不過情況很詭異
有時候是Checksum有問題 卻可以Run
有的沒問題卻不能Run
去檢查不同電腦灌的Qt的dll檔其大小也一樣
後來用binary的比較程式 才發現不同電腦灌Qt
所產生的Dll檔其內容會不同
再進一步觀察 發現該Dll檔案會紀錄Qt的安裝路徑
不同電腦如果安裝Qt的路徑不同 或是沒裝就會出問題
進一步測試 用 Hex Editor 把某些路徑改掉 故意改成錯的
(裡面有很多const的變數)
發現有的路徑改掉沒影響 但有的改掉就會出問題
最後確定是pulgins的路徑影響的
(qt安裝目錄下有資料夾為pulgins,裡面也有很多dll)
再來我就把路徑改回去 弄成對的 再把plugins裡面的東西一個個拿掉
發現我有參考到 "plugins\codecs"
(拿掉這目錄後我程式會出問題)
最後才知道 unicode轉big5的功能有用到 plugins\codecs\qtwcodecs4.dll
再來....
我將qtwcodecs4.dll跟exe執行檔放在一起
把dll的路徑弄成錯的(模擬Target端的狀況) 一樣還是不能執行
後來下了關鍵字 "qt plugins deployment" 去估狗查
才發現可以加個檔案 "qt.conf" 去指定路徑
所以我就放了個qt.conf
內容如下
[Paths]
Prefix = ./
然後在執行檔目錄下建目錄 "plugins\codecs\"
然後把qtwcodecs4的dll和lib都放進去 就可以Run了
你的狀況我猜一樣是plugins的問題
但是你是參考到plugins裡的哪個東西我就不知道了
這要你自己Try
(不然你把plugins整包都附上去應該也可以XDD)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.110.148.58
推 Ebergies:雖然沒這個問題不過這心得感覺就超級有用 XD 09/28 21:30
→ uranusjr:打開一秒關掉卻沒 error dialog 基本 90% 是 plugin 問題 09/28 21:52
→ uranusjr:這種的在 debug build 應該會有 console log, 不過我的建 09/28 21:53
→ uranusjr:議是直接被無視所以幫不上忙了 09/28 21:54
推 rockwalking:大推~~ 09/28 23:22
→ rockwalking:ur大XDDD 因為目前那台筆電不在沒辦法測試你的辦法SRY 09/28 23:23
推 rockwalking:晚點再用你的方法測試一下是哪個plugin 09/28 23:32
→ bdvstg:ur大的方法我剛剛試過.... 從cmd去執行執行檔 09/29 00:11
→ bdvstg:可是沒有任何log出現阿... 是否建置時要加特殊選項? 09/29 00:11
→ bdvstg:(我確定我有用Debug重建 還不只一次) 09/29 00:13
→ bdvstg:不過這樣倒是找到新方法可以是缺哪個plugin 一樣用Debug 09/29 00:25
→ bdvstg:然後把已知需要的Dll複製到Debug目錄下 09/29 00:26
→ bdvstg:等Debug建完 把Qt安裝目錄更名(假裝自己沒有裝Qt) 09/29 00:27
→ bdvstg:再去執行Debug 這樣就會停在出錯的地方 09/29 00:28
→ bdvstg:QTextCodec::codecForName("Big5-ETen")->toUnicode(text); 09/29 00:29
→ bdvstg:我停在這 所以可以推測是Codec缺 09/29 00:30
推 rockwalking:我用bd大之前的笨方法找到我缺的是qwindow.dll 09/29 01:39
推 damody:關鍵 qt.conf 09/29 02:17