그래서 부스트 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 라이브러리를 컴파일하고 여전히 같은 오류가 발생했습니다.
아마도 누군가 내가 무슨 일이 일어나는지 알아낼 수있게 될 것입니다. 어떤 도움을 주셔서 감사합니다! 고마워, 벤.
오류는 부스트 라이브러리가 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을 사용하고 있다면 업데이트해야합니다. –
안녕하세요, 답장을 보내 주셔서 감사합니다. 나는 이것을 시도해 보았지만 불행히도이 문제를 해결하지 못했습니다. 내가 틀린 일을하지 않는다면, 곧 또 다른 기회를 줄 것이다. –