如何在代码块下使用 pqxx 解决这个编译错误

Posted

技术标签:

【中文标题】如何在代码块下使用 pqxx 解决这个编译错误【英文标题】:How to solve this compiling error with pqxx under code blocks 【发布时间】:2015-11-02 15:53:56 【问题描述】:

在过去使用 libpq-fe.h 之后,对于一个新项目,我开始使用 pqxx。

所以,我在代码中包含:

#include <pqxx/pqxx>

然后我编译。一切都很好。 当我声明时:

pqxx::connection p_con;

我编译,我有错误:

obj/Debug/src/dbfunc.o: In function `pqxx::connect_direct::connect_direct(std::string const&)':
/usr/include/pqxx/connection.hxx:87: undefined reference to `pqxx::connectionpolicy::connectionpolicy(std::string const&)'
/usr/include/pqxx/connection.hxx:87: undefined reference to `vtable for pqxx::connect_direct'
obj/Debug/src/dbfunc.o: In function `pqxx::connect_direct::~connect_direct()':
/usr/include/pqxx/connection.hxx:84: undefined reference to `vtable for pqxx::connect_direct'
/usr/include/pqxx/connection.hxx:84: undefined reference to `pqxx::connectionpolicy::~connectionpolicy()'
obj/Debug/src/dbfunc.o: In function `pqxx::basic_connection<pqxx::connect_direct>::basic_connection()':
/usr/include/pqxx/basic_connection.hxx:61: undefined reference to `pqxx::connection_base::connection_base(pqxx::connectionpolicy&)'
/usr/include/pqxx/basic_connection.hxx:62: undefined reference to `pqxx::connection_base::init()'
obj/Debug/src/dbfunc.o: In function `pqxx::basic_connection<pqxx::connect_direct>::~basic_connection()':
/usr/include/pqxx/basic_connection.hxx:78: undefined reference to `pqxx::connection_base::close()'

在 google 上搜索表明这不是图书馆问题。 事实上:一个非常相似的问题,同样的错误,已经在这里解决了:Problem compiling program with pqxx

我不知道如何在 code::blocks 中解决它。有什么建议吗?

软件版本:

代码::Blocks 13.12 操作系统:Debian 8.2 Libpqxx:libpqxx-4.0 使用的编译器:gcc gcc --version: gcc (Debian 4.9.2-10) 4.9.2

我对使用 code::blocks 比较陌生,所以我可能遗漏了一些东西:-/

编辑:根据要求 2 路径:

/usr/lib/x86_64-linux-gnu/libpq.so /usr/lib/x86_64-linux-gnu/libpq.a

【问题讨论】:

你是用-lpq编译的吧? 不,我没有。我在项目-> 构建选项-> 编译器设置-> 其他选项中添加了它但没有任何变化。嗯,命令变了:“g++ -std=c++11 -Wall -fexceptions -g -lpq -Iinclude -c /myfile.cpp -o /myfile.o” 如果在您的系统上搜索名为 libpq.solibpq.a 的文件不成功,请先尝试 Mike Kinghan 的建议并发布其路径 好的,我都有。插入的路径有问题。 现在在链接器设置中添加-L/usr/lib/x86_64-linux-gnu/ -lpq 【参考方案1】:

-lpq,与所有-l&lt;libname&gt; 选项一样,是链接器选项,而不是 编译器选项。通过将其放入 编译器设置 -> 其他选项 你说你已经生成了一个编译命令行:

g++ -std=c++11 -Wall -fexceptions -g -lpq -Iinclude -c /myfile.cpp -o /myfile.o

因为这只是一个 compile 命令,不涉及链接,-lpq 被忽略, 在您的 link 命令行中 - 您没有向我们展示 - 没有 -lpq 选项 会出现。

-lpq编译器设置 -> 其他选项中取出并放入-lpqxx-lpq链接器设置 -> 其他选项。然后-lpqxx -lpq 将被传递给 链接器,因为它们需要。

如果链接器提示找不到-lpqxx,则需要安装 libpqxx

【讨论】:

按照您的指示进行了修改,但错误仍然存​​在。 @user_0 仍然缺少正确的库!查看更新。 好吧,我得承认,我有点生疏了,时隔多年,回到c++。谢谢你的指正。现在一切都很好。非常感谢。 @user_0 开始时忽略xx真是太愚蠢了!【参考方案2】:

你试过这种方法吗?

尝试声明与唯一指针的连接:

std::unique_ptr&lt;pqxx::connection&gt; connection;

然后您可以将其传递给如下函数:

bool do_something(std::unique_ptr<pqxx::connection> & connection) 

    connection.reset(new pqxx::connection("myconnectionstring"));

    std::string sqlstr ="select * from some table;";

    pqxx::result r;
    try 
        pqxx::work query(*connection, "");
        r = query.exec(sqlstr, "cache batch types");

     catch (const std::exception & e) 
        return false;
    

    // handle results...

    return true;

【讨论】:

仍然得到:/usr/include/pqxx/connection.hxx|84|undefined reference to vtable for pqxx::connect_direct'| AND /usr/include/pqxx/connection.hxx|84|undefined reference to pqxx::connectionpolicy::~connectionpolicy()'|【参考方案3】:

从 vim 切换到 Code::Blocks 时,我遇到了 OP 描述的完全相同的错误。

我通过在左侧窗格(“链接库”)的“链接器设置”选项卡上的“设置/编译器和调试器设置”下放置“pqxx”来解决它。

之后,我的程序(使用 pqxx 库)编译没有错误。

我在 Linux Mint 13 Maya 上使用 Code::Blocks 10.05。

【讨论】:

以上是关于如何在代码块下使用 pqxx 解决这个编译错误的主要内容,如果未能解决你的问题,请参考以下文章

编译代码时出现此错误,我已从另一个系统复制代码。我该如何解决这个错误?

如何在vs代码中编译c++?

如何解决flutter项目编译Debug Kotlin报错

编译器显示错误消息“从不强制转换的整数中生成指针”(反转数组)。我该如何解决这个问题? [关闭]

为 ARM NEON 编译时出现未知的 GCC 错误(严重)

双向链表 - 是啥导致我的代码引发编译器错误,我该如何解决?