【问题标题】:Libpqxx Undefined reference using CMake使用 CMake 的 Libpqxx 未定义引用
【发布时间】:2020-05-16 02:29:03
【问题描述】:

我正在将 CLion(强制 CMake)与 WSL 工具栈一起使用。

cmake_minimum_required(VERSION 3.13)
project(conana)

set(CMAKE_CXX_STANDARD 20)
include(${CMAKE_BINARY_DIR}/cmake-build-debug/conanbuildinfo.cmake)
conan_basic_setup()
set(APPEND CMAKE_PREFIX_PATH "/mnt/c/Users/b/src/libpqxx/")

set(SOURCES main.cpp)

add_executable(conana ${SOURCES})
#target_link_libraries(${project} ${CONAN_LIBS})

产生错误

====================[ Build | conana | Debug ]==================================
/usr/bin/cmake --build /mnt/c/Users/b/CLionProjects/conana --target conana -- -j 8
[ 50%] Building CXX object CMakeFiles/conana.dir/main.cpp.o
[100%] Linking CXX executable bin/conana
/usr/bin/ld: CMakeFiles/conana.dir/main.cpp.o: in function `__static_initialization_and_destruction_0(int, int)':
/home/buddha/.conan/data/libpqxx/7.0.1/bincrafters/stable/package/cfd7bc19fdc01c984df6e1fe4e7d6856d5f9b76a/include/pqxx/strconv.hxx:76: undefined reference to `pqxx::internal::demangle_type_name[abi:cxx11](char const*)'
collect2: error: ld returned 1 exit status
make[3]: *** [CMakeFiles/conana.dir/build.make:84: bin/conana] Error 1
make[2]: *** [CMakeFiles/Makefile2:73: CMakeFiles/conana.dir/all] Error 2
make[1]: *** [CMakeFiles/Makefile2:85: CMakeFiles/conana.dir/rule] Error 2
make: *** [Makefile:118: conana] Error 2

感谢您的帮助。取消注释 target_link_libraries 会出现“不受此 CMake 管理”错误。

【问题讨论】:

  • 可能是您链接的 libstdc++ 与您用于安装 conan 软件包的 libstdc++ 不同。确保在conan install 时阅读输出。默认一个是libstdc++ 而不是libstdc++11,因为历史原因和与旧发行版的兼容性。您可以更改默认的 libcxx 设置,如 docs.conan.io/en/latest/getting_started.htmlconan profile update settings.compiler.libcxx=libstdc++11 default 中所述。我很想知道这是否有效,即使你最终没有柯南。
  • 如果我尝试一下,我会告诉你的。感谢您的建议。

标签: cmake clion windows-subsystem-for-linux conan libpqxx


【解决方案1】:

最终删除了柯南并解决了 libpqxx 问题here 中的解决方案。 CMakeLists.txt 最终是

cmake_minimum_required(VERSION 3.13)
project(conana)

set(CMAKE_CXX_STANDARD 20)

find_library(PQXX_LIB pqxx REQUIRED)
find_library(PQ_LIB pq REQUIRED)

set(SOURCES main.cpp)

add_executable(conana ${SOURCES})
TARGET_LINK_LIBRARIES(conana ${PQXX_LIB} ${PQ_LIB})

这也解决了连接后立即出现的一些问题。希望这对某人有所帮助。

【讨论】:

    猜你喜欢
    • 2020-10-29
    • 1970-01-01
    • 2021-05-21
    • 2023-03-27
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    相关资源
    最近更新 更多