c++ udata.cpp:未定义的对“icudt71_dat”的引用

sbtkgmzw  于 2023-06-07  发布在  其他
关注(0)|答案(3)|浏览(176)

在Ubuntu 22.04上构建时,我在now project中遇到了一个奇怪的ICU相关链接错误。

/usr/bin/ld: /usr/bin/ld: DWARF error: invalid or unhandled FORM value: 0x23
/home/bkey1/vcpkg/installed/x64-linux/debug/lib/libicuuc.a(udata.ao): in function `openCommonData(char const*, int, UErrorCode*)':
udata.cpp:(.text+0x23f7): undefined reference to `icudt71_dat'
/usr/bin/ld: udata.cpp:(.text+0x2458): undefined reference to `icudt71_dat'

link命令如下所示。

usr/bin/cmake -E cmake_link_script CMakeFiles/now.dir/link.txt --verbose=1
/usr/bin/c++  -std=c++2a -Wall -Wextra -Wfloat-equal -Wno-long-long -Wpedantic -funsigned-char -D_GNU_SOURCE=1 -rdynamic CMakeFiles/now.dir/GetStardate.cpp.o CMakeFiles/now.dir/GetTime.cpp.o CMakeFiles/now.dir/GetTimePlatformPOSIX.cpp.o CMakeFiles/now.dir/GetTimePlatformWin32.cpp.o CMakeFiles/now.dir/ISO8601_time.cpp.o CMakeFiles/now.dir/InitLocale.cpp.o CMakeFiles/now.dir/executable_path.cpp.o CMakeFiles/now.dir/now.cpp.o CMakeFiles/now.dir/nowStrings.cpp.o -o now  /home/bkey1/vcpkg/installed/x64-linux/debug/lib/libboost_chrono.a /home/bkey1/vcpkg/installed/x64-linux/debug/lib/libboost_filesystem.a /home/bkey1/vcpkg/installed/x64-linux/debug/lib/libboost_locale.a /home/bkey1/vcpkg/installed/x64-linux/debug/lib/libboost_log.a /home/bkey1/vcpkg/installed/x64-linux/debug/lib/libboost_program_options.a /home/bkey1/vcpkg/installed/x64-linux/debug/lib/libboost_regex.a /home/bkey1/vcpkg/installed/x64-linux/debug/lib/libboost_system.a /home/bkey1/vcpkg/installed/x64-linux/debug/lib/libboost_thread.a /home/bkey1/vcpkg/installed/x64-linux/debug/lib/libboost_date_time.a /home/bkey1/vcpkg/installed/x64-linux/debug/lib/libboost_log_setup.a /home/bkey1/vcpkg/installed/x64-linux/debug/lib/libboost_atomic.a /home/bkey1/vcpkg/installed/x64-linux/debug/lib/libicudata.a /home/bkey1/vcpkg/installed/x64-linux/debug/lib/libicui18n.a /home/bkey1/vcpkg/installed/x64-linux/debug/lib/libicuuc.a
sqyvllje

sqyvllje1#

首先我想强调的是,提供的信息很少,所以像我自己的答案很可能需要猜测正在发生的事情。另一方面,我理解你的处境:你不能包含你不知道与主题相关的信息。

**答案:**我想提醒您注意一个事实,即icudt71_dat符号不会直接出现在代码中的任何地方,而是使用宏生成的。(检查.../source/common/unicode/utypes.h)因此,如果链接器抱怨没有找到这样的符号,这很可能意味着你链接的库版本与你的头文件不同。现在我不知道这是如何发生的,我必须看看你的系统,包括路径,链接路径等。但是,我强烈建议重新访问包含和链接路径。你也许可以重新编译库,验证,没有其他版本,重新编译,然后重新开始。如果标头对应于源,则应该可以工作。

1bqhqjot

1bqhqjot2#

如果你用静态库链接icu,可能是链接顺序的问题,试试这个:

list(APPEND ICU_LINK_LIBRARIES ${CMAKE_CURRENT_LIST_DIR}/../third_party/icu4c/lib/${TARGET_PLATFORM_NAME}/libicui18n.a)
  list(APPEND ICU_LINK_LIBRARIES ${CMAKE_CURRENT_LIST_DIR}/../third_party/icu4c/lib/${TARGET_PLATFORM_NAME}/libicuuc.a)
  list(APPEND ICU_LINK_LIBRARIES ${CMAKE_CURRENT_LIST_DIR}/../third_party/icu4c/lib/${TARGET_PLATFORM_NAME}/libicudata.a)
  list(APPEND ICU_LINK_LIBRARIES ${CMAKE_CURRENT_LIST_DIR}/../third_party/icu4c/lib/${TARGET_PLATFORM_NAME}/libicuio.a)
  list(APPEND ICU_LINK_LIBRARIES ${CMAKE_CURRENT_LIST_DIR}/../third_party/icu4c/lib/${TARGET_PLATFORM_NAME}/libicutu.a)
vyswwuz2

vyswwuz23#

请确认您缺少icu-devtools包。用命令安装

sudo apt get install icu-devtools

相关问题