gpt4 book ai didi

c++ - 包含 libpqxx 会导致使用 CMake 在 WSL 上构建失败

转载 作者:太空宇宙 更新时间:2023-11-04 12:33:13 26 4
gpt4 key购买 nike

我目前正在升级使用 PostgreSQL 数据库的 C++ 应用程序。由于我们通常在基于 *nix 的系统上运行,因此我目前在 Windows 子系统 Linux (WSL) 中工作,尤其是 Ubuntu 发行版。 PostgreSQL 10 是通过 apt-get 安装的,所有内容都在 following the directions to build 之前升级了libpqxx 在类 Unix 系统上。

作为一个非常基本的测试,我有一个只包含引用的简单类:

#include <pqxx/pqxx> 

但是,构建会导致(长)错误日志以以下内容开头:

[ 15%] Building CXX object src/CMakeFiles/Core.dir/Reporters/DbReporter.cpp.o
In file included from /usr/local/include/pqxx/array.hxx:18:0,
from /usr/local/include/pqxx/array:4,
from /usr/local/include/pqxx/pqxx:2,
from /mnt/c/Users/User/git/Simulation/src/Reporters/DbReporter.cpp:3:
/usr/local/include/pqxx/internal/encodings.hxx:26:42: error: ‘pqxx::internal::encoding_group pqxx::internal::enc_group’ redeclared as different kind of symbol
encoding_group enc_group(std::string_view);

随后的所有错误都与生成错误的 /pqxx/*. 下的文件具有相似的性质。通常用于无效声明、不属于 std 命名空间(未在应用程序中重新定义)的函数,或者似乎是语法错误。

我怀疑 libpqxx 库的构建方式不匹配。如何隔离和纠正问题?

最佳答案

虽然构建日志有点难以解析;然而,行 redeclared as different kind of symbol 是一个线索,输出中有错误,例如:

/usr/local/include/pqxx/stream_from.hxx: In constructor ‘pqxx::stream_from::stream_from(pqxx::transaction_base&, const string&, Iter, Iter ’:
/usr/local/include/pqxx/stream_from.hxx:134:19: error: missing template arguments before ‘(’ token
separated_list(",", columns_begin, columns_end)

这些强烈暗示代码中存在语法错误,尽管使用开发人员概述的工具链可以很好地构建库。重要的一点是 libpqxx 依赖于 C++17。错误最终出现在 CMakeLists.txt 文件中:

set(CMAKE_CXX_STANDARD 14)

表明尽管库依赖于 C++17,但应用程序是使用 C++14 构建的。 17 的更新行更正了问题并允许构建代码。此时 CMakeLists.txt must also be updated to link correctly :

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lpqxx -lpq")
set(PQXX /usr/local/include/pqxx)

find_library(PQXX_LIB pqxx)
find_library(PQ_LIB pq)

target_link_libraries(PROGRAM ${PQXX_LIB} ${PQ_LIB})

关于c++ - 包含 libpqxx 会导致使用 CMake 在 WSL 上构建失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57810153/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com