如何在代码块

时间:2015-11-02 15:53:57

标签: c++ gcc codeblocks

过去使用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()'

在谷歌上搜索表明这不是库问题。
事实上:一个非常相似的问题,同样的错误,已在这里得到解决:Problem compiling program with pqxx

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

软件版本:

  • Code :: Blocks 13.12
  • Os: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

3 个答案:

答案 0 :(得分:2)

像所有-lpq选项一样,

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

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

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

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

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

答案 1 :(得分:0)

你尝试过这种方法吗?

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

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;
}

答案 2 :(得分:0)

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

我通过放置&#34; pqxx&#34;解决了这个问题。在&#39;设置/编译器和调试器设置&#34;在选项卡&#34;链接器设置&#34;在左侧窗格中(&#34;链接库&#34;)。

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

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