2013-01-10 2 views
1

그래서 부스트 1.50.0 라이브러리, 특히 부스트 '로켈'라이브러리를 사용하는 프로젝트를 컴파일하는 데 문제가 있습니다.Linux에서 Boost 1.50 로켈로 컴파일하는 ICU 문제

(.text._ZN5boost6locale8impl_icu10num_formatIcED2Ev[_ZN5boost6locale8impl_icu10num_formatIcED5Ev]+0x20):-1: error: undefined reference to `icu_48::Locale::~Locale()' 

내 즉시 가정은 내가 제대로 프로젝트의 libicu-dev에 라이브러리를 연결되지 않았 음을, 그리고 내 cmake 파일 (FindICU.cmake)에 라이브러리를 추가 : 내가 컴파일 할 때이 오류를 수신하고 있습니다.

FindICU.cmake :

# Try to find the ICU library 
# ICU_FOUND - system has ICU 
# ICU_INCLUDE_DIR - the ICU include directory 
# ICU_LIBRARY - the ICU library 

FIND_PATH(ICU_INCLUDE_DIR NAMES utf8.h utypes.h PATH_SUFFIXES unicode) 
SET(_ICUI18N_STATIC_LIBS libicui18n.a) 
SET(_ICUI18N_SHARED_LIBS libicui18n.dll.a icui18n) 
SET(_ICUUC_STATIC_LIBS libicuuc.a) 
SET(_ICUUC_SHARED_LIBS libicuuc.dll.a icuuc) 
IF(USE_STATIC_LIBS) 
    FIND_LIBRARY(ICUI18N_LIBRARY NAMES ${_ICUI18N_STATIC_LIBS} ${_ICUI18N_SHARED_LIBS}) 
    FIND_LIBRARY(ICUUC_LIBRARY NAMES ${_ICUUC_STATIC_LIBS} ${_ICUUC_SHARED_LIBS}) 
ELSE() 
    FIND_LIBRARY(ICUI18N_LIBRARY NAMES ${_ICUI18N_SHARED_LIBS} ${_ICUI18N_STATIC_LIBS}) 
    FIND_LIBRARY(ICUUC_LIBRARY NAMES ${_ICUUC_SHARED_LIBS} ${_ICUUC_STATIC_LIBS}) 
ENDIF() 
SET(ICU_LIBRARIES ${ICUI18N_LIBRARY} ${ICUUC_LIBRARY}) 
INCLUDE(FindPackageHandleStandardArgs) 
FIND_PACKAGE_HANDLE_STANDARD_ARGS(ICU DEFAULT_MSG ICU_LIBRARIES ICU_INCLUDE_DIR) 
MARK_AS_ADVANCED(ICU_LIBRARIES ICU_INCLUDE_DIR) 

과 같이 여기 부스트 libs와 내 프로젝트 검색을했다 :

# find boost 
set(REQUIRED_BOOST_COMPONENTS locale system filesystem regex thread) 
if(WIN32) 
    set(Boost_THREADAPI win32) 
    set(framework_DEFINITIONS ${framework_DEFINITIONS} -DBOOST_THREAD_USE_LIB) # fix boost thread linkage 
    set(REQUIRED_BOOST_COMPONENTS ${REQUIRED_BOOST_COMPONENTS} chrono) # mingw32 does not have std::thread 
else() 
    find_package(ICU) 
    set(Boost_LIBRARIES ${Boost_LIBRARIES} ${ICU_LIBRARIES}) 
endif() 
set(Boost_USE_MULTITHREADED ON) 
set(Boost_USE_STATIC_LIBS ${USE_STATIC_LIBS}) 
find_package(Boost 1.50.0 COMPONENTS ${REQUIRED_BOOST_COMPONENTS} REQUIRED) 

을하고 그것에게 문제를 발견하지

-- Found ICU: /usr/lib/libicui18n.a;/usr/lib/libicuuc.a 
-- Boost version: 1.50.0 
-- Found the following Boost libraries: 
-- locale 
-- system 
-- filesystem 
-- regex 
-- thread 

하지만 컴파일 할 때 여전히이 오류가 발생합니다. 나는 우분투 12.04를 실행하고있다. 내 부스트 라이브러리를 https://launchpad.net/~28msec/+archive/boost 저장소에서 12.04로 가져 오는 것은 부스트 ​​1.50 라이브러리를위한 패키지를 제공한다. libicu-dev (4.6.x) 용 표준 패키지를 사용하고 있습니다.

EDIT : ICU가있는 경우와없는 ICU가 구성된 1.50.0 부스트 라이브러리도 컴파일했습니다. 둘 다 작동하지 않습니다. 또한 ICU 라이브러리를 컴파일하고 여전히 같은 오류가 발생했습니다.

아마도 누군가 내가 무슨 일이 일어나는지 알아낼 수있게 될 것입니다. 어떤 도움을 주셔서 감사합니다! 고마워, 벤.

+1

오류는 부스트 라이브러리가 icu 4.8을 사용하여 빌드되었고 4.6을 사용한다고 말합니다. Ubuntu 12.04는 [version 4.8] (http://packages.ubuntu.com/search?keywords=libicu&search==section=precise§ion=all)을 사용할 수 있으므로 실제로 4.6을 사용하고 있다면 업데이트해야합니다. –

+0

안녕하세요, 답장을 보내 주셔서 감사합니다. 나는 이것을 시도해 보았지만 불행히도이 문제를 해결하지 못했습니다. 내가 틀린 일을하지 않는다면, 곧 또 다른 기회를 줄 것이다. –

답변

2

버전 번호 (링크에 사용됨)는 ICU 헤더에 의해 설정되므로 4.8과 비교하여 컴파일 중이지만 4.6과 같은 다른 링크로 연결하려고하는 것 같습니다. uvernum.h (또는 이전 버전 인 uversion.h)에는 버전 #이 들어 있습니다.

관련 문제