2012-02-23 78 views
0

我想使用Visual C++ 2010年表達構建的Xerces C++版本3 ICU

我已經下載ICU源和建造它喜歡它在自述中說,建立的Xerces 3.1.1 ICU。

現在我需要與ICU的二進制文件,我只是用來構建的Xerces。

Xerces站點版本3.1.1的構建說明指出「您也可以選擇Xerces-C++庫是否應該使用ICU進行代碼轉換」,但他們沒有說明具體如何。我查看了所有構建選項以及唯一發現的內容(也許我錯過了某些內容?),這可能與預處理器宏列表有關,我看到以下定義 - XERCES_USE_TRANSCODER_WINDOWS。

我想,也許我需要將其更改爲XERCES_USE_TRANSCODER_ICU。這只是一個猜測,所以首先我查看了Xerces代碼,並且看到XERCES_USE_TRANSCODER_ICU確實出現(例如,它們檢查在包括ICU頭文件之前是否定義了它)。

因此,我將XERCES_USE_TRANSCODER_WINDOWS更改爲XERCES_USE_TRANSCODER_ICU,將ICU include目錄添加到包含目錄路徑以及所有ICU .lib文件到鏈接程序依賴項中,並試圖構建它。我得到無法解析的外部錯誤:

PlatformUtils.obj:錯誤LNK2019:無法解析的外部符號 「公用:__thiscall xercesc_3_1 :: ICUTransService :: ICUTransService(類xercesc_3_1的MemoryManager :: *)」(?? 0ICUTransService @ xercesc_3_1 @@ QAE @ PAVMemoryManager @ 1 @@ Z)在函數「private:static class xercesc_3_1 :: XMLTransService * __cdecl xercesc_3_1 :: XMLPlatformUtils :: makeTransService(void)」中引用(?makeTransService @ XMLPlatformUtils @ xercesc_3_1 @@ CAPAVXMLTransService @ 2 @ XZ) 1> C:\ cpp_lib \的xerces-C-3.1.1 \項目\的Win32 \ VC10 \的xerces-所有\ XercesLib ........... \構建\的Win32 \ VC10 \調試\的xerces-c_3_1D。 DLL:致命錯誤LNK1120:1周無法解析的外部

Xerces站點提供了更多關於構建具有ICU的Xerces 2.8的具體說明(它不適用於版本3,因爲它是通過未提供版本3的腳本完成的)。我也嘗試過(儘管我需要使用最新版本),但它也不能很好地工作。沒有.dll或.lib文件被創建。

謝謝。

+0

我想通了,我不得不從UTIL在XercesLib項目/代碼轉換排除WIN32TransService.cpp。 – gabriel 2012-02-23 10:14:12

回答

0

因爲我有同樣的問題,這是第一個谷歌命中尋找它一個,我會給出一個答案,儘管它已經有一段時間了,因爲你問的問題。 這些是ICU建立在Visual Studio(在VS10工作對我來說)的Xerces-C步驟:

  1. 下載並按照上述方法建立ICU。
  2. 使用VS打開xerces-all.sln解決方案文件。
  3. 選擇ICU調試/發佈版本配置 - 它爲您設置XERCES_USE_TRANSCODER_ICU
  4. 爲ICU添加包括和庫路徑到XercesLib項目的調性質,在該項目的其他連接體的依賴增加了ICU庫。
  5. 構建和快樂 - 無需排除WIN32TransService.cpp