2013-02-14 1 views
4

내가 어떤 클래스 멤버로 선언 한 내 프로젝트 컴파일하려고 :연결 오류 : icu_50 :: 유니 코드 스트링 :: 유니 코드 스트링()에 정의되지 않은 참조

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

포함 한 후을 (예 그것은 발견)이 검색 내 CMakeLists.txt에서

#include <unicode/unistr.h> 

는 찾아와의 연계 :

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

: 출력이 오류를 던지기 전에 알 수 있듯이 icuuc icudata (libicuuc, libicudata)

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

나는 내 오류가 연결 단계에서 그대로/usr/지방/* cmake가 제대로 라이브러리를 찾아 아래

I 내장 소스 ICU4C 50.1.2에서 설치하고 설치 한 데비안 Wheezy에서 -std = C++ 0x를 사용하여 gcc-4.7.2를 사용합니다. 어젯밤에 데비안 스퀴즈에서 같은 플래그로 gcc-4.3.2와 정확히 같은 코드가 컴파일되었습니다!

나는 내 인생에서 내가 할 수없는 일을 잘못 이해하고있다! 도와주세요!

답변

5

ICU4C를 구축 할 때 이것이 내 잘못 인 것처럼 보입니다. 나는 이것에 많은 Google 게시물을 보았지만 대답이 없으므로 간단한 설명을 남깁니다. false로 네임 스페이스를 사용하여 정의)

1 : 리눅스에 구축 할 때

# 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), I는 갔다 ICU를 구성 할 때주의 깊게 문서를 읽어 보면 , 당신이 어떤 일을해야한다고 비 공유, 정적 라이브러리 :

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

3)이 내 오류가 발생하는 중요한 부분입니다 : 데프으로

을 ault, ICU 라이브러리 진입 점 이름에는 ICU 버전 접미사가 있습니다. 응용 프로그램을 중단시키지 않고 ICU를 업그레이드 할 수 있도록 시스템 수준 설치의 경우이 기능을 해제하십시오. 예를 들어이 구성에서

runConfigureICU Linux --disable-renaming 

공공 헤더 파일을 포함하고 올바른 진입 점 이름을 얻을 수있는 응용 프로그램을 설치해야합니다.

나는 Squeeze에서 그런 일을했지만 Wheezy에서는하지 않았기 때문에 시스템 전체 설치에서 모든 연결 오류가 발생했습니다. 수업을 통해 다른 사람에게 도움이되기를 바랍니다.