2013-02-14 107 views
4

我試圖編譯我的項目,我已經聲明爲類成員的一些:鏈接錯誤:未定義參考icu_50 :: ::的UnicodeString的UnicodeString()

icu::UnicodeString label; 
icu::UnicodeString tags; 
icu::UnicodeString domain; 
icu::UnicodeString data; 

已經列入後(是的,它被發現)

#include <unicode/unistr.h> 

在我的CMakeLists.txt它搜索,發現和使用環節:icuuc icudata(libicuuc,libicudata)作爲之前拋出錯誤輸出提示:

-o icarus -rdynamic -lPocoNet -lPocoUtil -lPocoXML -licuuc -licudata

我已經建立,並從源頭ICU4C 50.1.2安裝,並將其安裝在/ usr /本地/ * cmake的找到正確的庫,因爲我的錯誤是在鏈接階段:

undefined reference to icu_50::UnicodeString::UnicodeString()' undefined reference to icu_50::UnicodeString::~UnicodeString()'

我在Debian Wheezy上啓用gcc-4.7.2並啓用-std = C++ 0x。 昨晚在Debian Squeeze上完全相同的代碼在gcc-4.3.2上編譯時使用相同的標記!

我不能爲了我的生活,弄清楚我做錯了什麼!請幫忙!

回答

5

看起來這是我構建ICU4C時的錯。 我留下一個簡短的解釋,因爲我已經看到很多谷歌的帖子,但沒有答案。 如果在配置ICU時仔細閱讀文檔,它指出你應該做的一些事情:

1)定義使用命名空間爲false:

# ifndef U_USING_ICU_NAMESPACE 
-#  define U_USING_ICU_NAMESPACE 1 
+  // Set to 0 to force namespace declarations in ICU usage. 
+#  define U_USING_ICU_NAMESPACE 0 

2)在Linux上構建,我去了非共享,靜態庫:

runConfigureICU Linux --enable-static --disable-shared 

3)這是導致我的錯誤的重要組成部分:

通過高清ault,ICU庫入口點名稱具有ICU版本後綴。將其關閉以進行系統級安裝,以在不中斷應用程序的情況下啓用ICU升級。例如:必須安裝應用程序,包括和得到正確的入口點的名字從這個配置

runConfigureICU Linux --disable-renaming 

公共的頭文件。

我在擠壓上做了這樣的事,但不是在Wheezy上,因此在系統範圍的安裝上造成了所有的連接錯誤。 經驗教訓,希望它可以幫助別人。

相關問題