c++ - 无法编译测试 PostgreSQL 程序

标签 c++ postgresql libpqxx

当我用 C++ 编译我的 PostgreSQL 程序时,我遇到了这些错误。谁能告诉我这是什么原因。

user@linux-yyzo:~/WorkDir/Program> g++ test.cpp -lpqxx -I/usr/local/include -I/usr/local/pgsql/include

/usr/local/lib/libpqxx.a(util.o): In function `pqxx::describe_thread_safety()':
/home/user/WorkDir/Program/Connections/libpqxx-4.0/src/util.cxx:69: undefined reference to `PQisthreadsafe'
/usr/local/lib/libpqxx.a(util.o): In function `pqxx::internal::freepqmem(void const*)':
/home/user/WorkDir/Program/Connections/libpqxx-4.0/src/util.cxx:195: undefined reference to `PQfreemem'
/usr/local/lib/libpqxx.a(result.o): In function `pqxx::internal::result_data::~result_data()':
/home/user/WorkDir/Program/Connections/libpqxx-4.0/src/result.cxx:55: undefined reference to `PQclear'
/usr/local/lib/libpqxx.a(result.o): In function `pqxx::result::size() const':
/home/user/WorkDir/Program/Connections/libpqxx-4.0/src/result.cxx:101: undefined reference to `PQntuples'
/usr/local/lib/libpqxx.a(result.o): In function `pqxx::result::empty() const':
/home/user/WorkDir/Program/Connections/libpqxx-4.0/src/result.cxx:107: undefined reference to `PQntuples'
/usr/local/lib/libpqxx.a(result.o): In function `pqxx::result::CmdStatus() const':
/home/user/WorkDir/Program/Connections/libpqxx-4.0/src/result.cxx:241: undefined reference to `PQcmdStatus'
/usr/local/lib/libpqxx.a(result.o): In function `pqxx::result::inserted_oid() const':
/home/user/WorkDir/Program/Connections/libpqxx-4.0/src/result.cxx:256: undefined reference to `PQoidValue'
/usr/local/lib/libpqxx.a(result.o): In function `pqxx::result::affected_rows() const':
/home/user/WorkDir/Program/Connections/libpqxx-4.0/src/result.cxx:262: undefined reference to `PQcmdTuples'
/usr/local/lib/libpqxx.a(result.o): In function `pqxx::result::GetIsNull(unsigned long, unsigned int) const':
/home/user/WorkDir/Program/Connections/libpqxx-4.0/src/result.cxx:279: undefined reference to `PQgetisnull'
/usr/local/lib/libpqxx.a(result.o): In function `pqxx::result::GetLength(unsigned long, unsigned int) const':
/home/user/WorkDir/Program/Connections/libpqxx-4.0/src/result.cxx:286: undefined reference to `PQgetlength'
/usr/local/lib/libpqxx.a(result.o): In function `pqxx::result::errorposition() const':
/home/user/WorkDir/Program/Connections/libpqxx-4.0/src/result.cxx:344: undefined reference to `PQresultErrorField'
/usr/local/lib/libpqxx.a(result.o): In function `pqxx::result::ThrowSQLError(std::string const&, std::string const&) const':
/home/user/WorkDir/Program/Connections/libpqxx-4.0/src/result.cxx:132: undefined reference to `PQresultErrorField'
/usr/local/lib/libpqxx.a(result.o): In function `pqxx::result::columns() const':
/home/user/WorkDir/Program/Connections/libpqxx-4.0/src/result.cxx:363: undefined reference to `PQnfields'
/usr/local/lib/libpqxx.a(result.o): In function `pqxx::result::column_name(unsigned int) const':
/home/user/WorkDir/Program/Connections/libpqxx-4.0/src/result.cxx:353: undefined reference to `PQfname'
/usr/local/lib/libpqxx.a(result.o): In function `pqxx::result::table_column(unsigned int) const':
/home/user/WorkDir/Program/Connections/libpqxx-4.0/src/result.cxx:318: undefined reference to `PQftablecol'
/usr/local/lib/libpqxx.a(result.o): In function `pqxx::result::StatusError() const':
/home/user/WorkDir/Program/Connections/libpqxx-4.0/src/result.cxx:214: undefined reference to `PQresultStatus'
/home/user/WorkDir/Program/Connections/libpqxx-4.0/src/result.cxx:233: undefined reference to `PQresultStatus'
/home/user/WorkDir/Program/Connections/libpqxx-4.0/src/result.cxx:228: undefined reference to `PQresultErrorMessage'
/usr/local/lib/libpqxx.a(result.o): In function `pqxx::result::column_table(unsigned int) const':
/home/user/WorkDir/Program/Connections/libpqxx-4.0/src/result.cxx:303: undefined reference to `PQftable'
/usr/local/lib/libpqxx.a(result.o): In function `pqxx::result::column_type(unsigned int) const':

/usr/local/lib/libpqxx.a(connection.o): In function `pqxx::connect_direct::do_startconnect(pg_conn*)':
/home/user/WorkDir/Program/Connections/libpqxx-4.0/src/connection.cxx:94: undefined reference to `PQstatus'
/home/user/WorkDir/Program/Connections/libpqxx-4.0/src/connection.cxx:96: undefined reference to `PQerrorMessage'
/usr/local/lib/libpqxx.a(tuple.o): In function `pqxx::result::column_number(char const*) const':
/home/user/WorkDir/Program/Connections/libpqxx-4.0/src/tuple.cxx:194: undefined reference to `PQfnumber'
collect2: error: ld returned 1 exit status

最佳答案

您需要添加 -lpq 作为 GCC 的选项以链接 libpq 本身。它必须在 -lpqxx 之后:

g++ test.cpp -lpqxx -lpq -I/usr/local/include -I/usr/local/pgsql/include
#                   ^^^^ here

这是必需的,因为 libpqxx 只是 libpq 的 C 接口(interface)的 C++ 包装器,它是 PostgreSQL 的真正客户端库。您可能需要在 -lpq 之前添加 -L/path/to/libpq 以防在系统的库路径中找不到它。

关于c++ - 无法编译测试 PostgreSQL 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19311868/

相关文章:

c++ - gcc8.2 和 (intel) icc19.0.1 之间的 constexpr 差异

c++ - 使用 filesystem::path,如何以跨平台方式打开文件?

postgresql - 如何将 Spark DataFrame 写入 Postgres DB

postgresql - 如何使用 psql 命令列出、创建、使用和检查数据库?

c++ - 为什么这个简单的 libpqxx 代码会泄漏内存?

c++ - 在 Qt 应用程序中包含 adb

c++ - 素描圆柱体

django - 如何知道 Django 中的数据库何时准备就绪?

c++ - 如何从 pqxx 调用重载的远程过程

postgresql - postgresql 中未执行的删除语句