[問題] 有關 SDK, QT, DLL, Phonon 的問題
我知道這種東西應該自己去找資料才對
不過現在比較沒時間,而且已經有了暫時性的白癡解決方法
所以斗膽到這邊 PO 文尋求答案
等我弄完這些會乖乖回頭找答案的
還請各位幫忙解答 o(〒﹏〒)o
主要問題有:
1. Window SDK 所附的 CMD Shell 是不是只有設定一些變數?
2. 不同的 Compiler 所編譯出的 DLL 是不是不通用?
3. qmake 有沒有參數可以選擇要產生哪個 Compiler 的 makefile?
4. qmake 產生出 MS Compiler 所用的 makefile 時,
有沒有辦法讓錯誤訊息印到 console 上?
問題發生的原因:
打算寫程式能讀取及撥放 mp3 檔案
因為趕時間的關係,打算用 QT 來寫
經搜尋資料後,得知可使用 Phonon 完成此項工作
但是 Phonon 不是一開始 QT 就幫你編譯好的
似乎由於需要仰賴各平台的某些東西 (在 win32 是 DirectX & Direct Show)
需要自己重新編譯
經過自己一番胡搞瞎搞
發現只有在 Windows SDK 所附的 CMD Shell 下才能正常編譯 Phonon 套件
所以有了問題 1 的出現
我是有開過該 CMD Shell 的程式檔,不過看不太懂 orz
從註解跟看的懂的部分判斷似乎是只有定義一些變數,不過不是很確定
接下來編譯好後,實際去嘗試編譯可以播放 mp3 檔案的程式
結果發現 qmake 似乎也被重新編譯過
產生出的 makefile 只能給 VC 的 nmake 吃
而不能給 QT 本來用的 mingw32-make 吃
似乎需要更改 QMAKESPEC 這個變數?一時找不太到相關資料
所以有了問題 3 的出現
丟給 nmake 吃後成功跑出可以執行的程式且執行成功
但是如果編譯過程有問題,錯誤訊息不會顯示
所以有了問題 4 的出現
編譯出給 nmake 吃的 code 大概像這樣
{.}.cpp{release\}.obj::
$(CXX) -c $(CXXFLAGS) $(INCPATH) -Forelease\ @<<
$<
<<
個人推測那個 @<< 應該是把錯誤訊息重新導向到 VC 的視窗裡
可是我現在是在用 CMD shell 編譯阿 orz ...
是因為這樣所以沒有顯示錯誤訊息嗎?
如果是的話,有辦法在 qmake 產生 makefile 的時候
就叫他將錯誤訊息印到 CMD shell 上嗎?
最後
所有配件都能動了,想要開始寫的時候
打開 QT 的參考資料 (QT 把參考資料寫成一個程式,叫 QT Assistant)
結果 ... 結果他不會動了 ...
冒出一個錯誤視窗
無法找到程序輸入點?insert@QListData@@QAEPAPAXH@Z(在動態聯結程式庫QTCore4.dll)
個人推測是因為編譯 Phonon 套件時,連 QTCore4.dll 也一起重新編譯過了
重新編譯時用的是 nmake
因此原來編譯好的 QT Assistant 執行檔就找不到函式了
阿沒有參考資料我要怎麼寫程式 orz ...
因此有了問題 2 的產生
本來以為 DLL 是平台相關的,Win32 平台上編譯出的應該都一樣
現在看來好像是編譯器相關的?
最後非常蠢的做法是再灌一套 QT
程式碼先把有關 Phonon 的部分註解掉,用新灌的 QT 編譯
編譯過沒問題了,再把註解掉的部分取消掉
用可以編譯 Phonon 的套件來編譯
雖然很蠢,但是還能動啦 ... 反正只在自己的電腦上跑
不過如果換到別台電腦上跑,不就也會出現 DLL 無法找到程序出入點的問題嗎?
雖然用 static link 大概可以過關,不過總感覺哪邊不對勁
最後的最後,再把問題重貼一次,請各位幫忙
1. Window SDK 所附的 CMD Shell 是不是只有設定一些變數?
2. 不同的 Compiler 所編譯出的 DLL 是不是不通用?
3. qmake 有沒有參數可以選擇要產生哪個 Compiler 的 makefile?
4. qmake 產生出 MS Compiler 所用的 makefile 時,
有沒有辦法讓錯誤訊息印到 console 上?
以後我會用功一點的 ...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.170.12.156
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章