我最近重新开始使用CMake做一个项目,但在重新构建它时遇到了麻烦。
问题是,在最后的链接步骤中,g++说它找不到对boost locale generate函数的引用,即使我已经使用find_package来获取boost并链接它。
以下是失败的步骤:
/usr/bin/c++ -m64 -O3 -DNDEBUG -m64 CMakeFiles/sable.dir/main.cpp.o -o ../sable -Wl,-rpath,$HOME/.conan/data/yaml-cpp/0.6.3/_/_/package/607c93de2fe0fd7a16b1a720c8a32bd38084b7f0/lib libsable_lib.a $HOME/.conan/data/yaml-cpp/0.6.3/_/_/package/607c93de2fe0fd7a16b1a720c8a32bd38084b7f0/lib/libyaml-cpp.so /usr/lib/x86_64-linux-gnu/libboost_locale.so.1.74.0 /usr/lib/x86_64-linux-gnu/libboost_chrono.so.1.74.0 /usr/lib/x86_64-linux-gnu/libboost_system.so.1.74.0 /usr/lib/x86_64-linux-gnu/libboost_thread.so.1.74.0 /usr/lib/x86_64-linux-gnu/libboost_atomic.so.1.74.0 /usr/lib/x86_64-linux-gnu/libicui18n.so /usr/lib/x86_64-linux-gnu/libicuuc.so /usr/lib/x86_64-linux-gnu/libicudata.so -ldl
/usr/bin/ld: libsable_lib.a(parse.cpp.o): in function `sable::TextParser::TextParser(sable::FontList&&, std::string const&, std::string const&)':
parse.cpp:(.text+0x551b): undefined reference to `boost::locale::generator::generate(std::string const&) const'
下面是我在CMake中找到依赖项的地方:
find_library(YAML yaml-cpp REQUIRED)
find_package(Boost 1.71.0 REQUIRED COMPONENTS locale)
find_package(ICU 66.1 REQUIRED COMPONENTS in uc dt)
message(STATUS ${Boost_LIBRARIES})
list(
APPEND SABLE_LIBRARIES
${Boost_LIBRARIES}
${ICU_LIBRARIES}
)
这是我把所有东西联系起来的地方:
add_library(sable_lib STATIC ${SABLE_SOURCE_FILES})
target_link_libraries(sable_lib PUBLIC coverage_config ${YAML} ${SABLE_LIBRARIES} ${SABLE_FS_LIBRARIES} ${SABLE_PLATFORM_LIBRARIES})
add_executable(
sable
"${CMAKE_CURRENT_SOURCE_DIR}/main.cpp"
)
target_link_libraries(
sable sable_lib
)
这在过去的某个时候肯定是有效的。唯一改变的是,我切换到从Conan获取我的一个依赖项,但它不是boost或ICU组件。我正在使用GCC 11构建Kubuntu 22.04,如果这有任何区别的话。
1条答案
按热度按时间ulydmbyx1#
我想明白了:在我的默认柯南配置文件中,我设置了
compiler.libcxx=libstdc++
,而它应该是compiler.libcxx=libstdc++11
。