1

そのため、boost 1.50.0 ライブラリ、より具体的には boost 'locale' ライブラリを使用しているプロジェクトのコンパイルに問題があります。コンパイル時に次のエラーが表示されます。

(.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)

私のプロジェクトは、次のようにブースト ライブラリを検索しました。

# 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 はブースト 1.50 ライブラリのパッケージを提供するため、https: //launchpad.net/~28msec/+archive/boost リポジトリからブースト ライブラリを取得して Ubuntu 12.04 を実行しています。libicu-dev (4.6.x) の標準パッケージを使用しています。

編集:ICUを使用して構成した場合と使用しない場合で構成された独自の1.50.0ブーストライブラリもコンパイルしました(どちらも機能しませんでした)独自のICUライブラリもコンパイルしましたが、同じエラーが発生しました...これには完全に困惑しています。

おそらく、誰かが何が起こっているのかを理解するのを手伝ってくれるでしょう。どんな助けでも大歓迎です!ありがとう、ベン。

4

1 に答える 1

2

バージョン番号 (リンケージで使用される) は ICU ヘッダーによって設定されるため、4.8 に対してコンパイルしているように見えますが、別のもの (4.6 など) に対してリンクしようとしています。uvernum.h (または古いバージョンでは uversion.h) にはバージョン # が含まれています。

于 2013-01-15T17:49:58.170 に答える