如何在代码块下使用 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.so
或 libpq.a
的文件不成功,请先尝试 Mike Kinghan 的建议并发布其路径
好的,我都有。插入的路径有问题。
现在在链接器设置中添加-L/usr/lib/x86_64-linux-gnu/ -lpq
【参考方案1】:
-lpq
,与所有-l<libname>
选项一样,是链接器选项,而不是
编译器选项。通过将其放入 编译器设置 -> 其他选项
你说你已经生成了一个编译命令行:
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<pqxx::connection> 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 tovtable 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 解决这个编译错误的主要内容,如果未能解决你的问题,请参考以下文章
编译代码时出现此错误,我已从另一个系统复制代码。我该如何解决这个错误?
编译器显示错误消息“从不强制转换的整数中生成指针”(反转数组)。我该如何解决这个问题? [关闭]