2010/09/14

Publish Your WxWidget Program


Publish Your wxWidget Program

初入wxWidget時,是使用wxDev-C++當作開發編譯環境,後來不經意的使用了VS2005的環境,便開始愛上cl.exe那麼飛快編譯速度、Visual Studio良好Debug環境。

但最近在發行wxWidget程式(Release Version)時,在其他未安裝Visual Studio的電腦上無法執行的問題,將錯誤訊息google過後發現是編譯參數/MD的關係,將/MD改成/MT便行(在project屬性頁的組態屬性-->C/C++-->程式碼產生裡)。

改完重編後,又發生
------ 已啟動全部重新生成: 項目: WxWidgetsWizardTest, 配置: Debug Win32 ------
正在刪除項目「WxWidgetsWizardTest」(配置「Debug|Win32」)的中間文件和輸出文件
正在編譯...
WxWidgetsWizardTestFrm.cpp
正在編譯...
WxWidgetsWizardTestApp.cpp
正在編譯資源清單...
正在鏈接...
MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: _free 已經在 LIBCMT.lib(free.obj) 中定義
MSVCRTD.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) 已經在 LIBCMT.lib(typinfo.obj) 中定義
MSVCRTD.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) 已經在 LIBCMT.lib(typinfo.obj) 中定義
LINK : warning LNK4098: 默認庫「LIBCMT」與其他庫的使用衝突;請使用 /NODEFAULTLIB:library
LINK : warning LNK4098: 默認庫「MSVCRTD」與其他庫的使用衝突;請使用 /NODEFAULTLIB:library
LINK : warning LNK4098: 默認庫「LIBCMTD」與其他庫的使用衝突;請使用 /NODEFAULTLIB:library
D:\WxWidgetsWizardTest\Debug\WxWidgetsWizardTest.exe : fatal error LNK1169: 找到一個或多個多重定義的符號
生成日誌保存在「file://d:\WxWidgetsWizardTest\WxWidgetsWizardTest\Debug\BuildLog.htm」
WxWidgetsWizardTest - 4 個錯誤,3 個警告
========== 全部重新生成: 0 已成功, 1 已失敗, 0 已跳過 ==========
所以我又去google這個錯誤,發現是library部分也要以維持一致性,順手將C:\wxWidgets-2.9.0\build\msw\wx_vc8.sln打開後,並將所有的/MD改成/MT,重編後便OK了。

若還是有遇到問題,不彷注意一下自己連結的library裡,是否有用到debug的版本,library及程式編譯參數最好一模一樣,這樣碰到的問題會較少。