2011-03-13 135 views
4

我想用pqxx编译一个非常简单的程序(不做任何事的例子),但是不能这样做。 这里的 '程序':用pqxx编译程序的问题

$猫xx.cpp

#include <pqxx/pqxx> 
using namespace pqxx; 


int main() 
{ 
    connection conn("dbname=dout1"); 
    return 0; 
} 

我曾经尝试在C++编译命令:返回

g++ -I /usr/local/include/ -L /usr/local/lib/ -l pqxx -I /opt/postgres_home/include/ -L /opt/postgres_home/lib/ -lpq xx.cpp 

消息:

/tmp/cc18wMEy.o: In function `pqxx::connect_direct::connect_direct(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': 
xx.cpp:(.text._ZN4pqxx14connect_directC1ERKSs[pqxx::connect_direct::connect_direct(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)]+0x1f): undefined reference to `pqxx::connectionpolicy::connectionpolicy(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' 
xx.cpp:(.text._ZN4pqxx14connect_directC1ERKSs[pqxx::connect_direct::connect_direct(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)]+0x2a): undefined reference to `vtable for pqxx::connect_direct' 
/tmp/cc18wMEy.o: In function `pqxx::connect_direct::~connect_direct()': 
xx.cpp:(.text._ZN4pqxx14connect_directD1Ev[pqxx::connect_direct::~connect_direct()]+0x13): undefined reference to `vtable for pqxx::connect_direct' 
xx.cpp:(.text._ZN4pqxx14connect_directD1Ev[pqxx::connect_direct::~connect_direct()]+0x1f): undefined reference to `pqxx::connectionpolicy::~connectionpolicy()' 
/tmp/cc18wMEy.o: In function `pqxx::basic_connection<pqxx::connect_direct>::basic_connection(char const*)': 
xx.cpp:(.text._ZN4pqxx16basic_connectionINS_14connect_directEEC1EPKc[pqxx::basic_connection<pqxx::connect_direct>::basic_connection(char const*)]+0x2b): undefined reference to `pqxx::connection_base::connection_base(pqxx::connectionpolicy&)' 
xx.cpp:(.text._ZN4pqxx16basic_connectionINS_14connect_directEEC1EPKc[pqxx::basic_connection<pqxx::connect_direct>::basic_connection(char const*)]+0xd6): undefined reference to `pqxx::connection_base::init()' 
/tmp/cc18wMEy.o: In function `pqxx::basic_connection<pqxx::connect_direct>::~basic_connection()': 
xx.cpp:(.text._ZN4pqxx16basic_connectionINS_14connect_directEED1Ev[pqxx::basic_connection<pqxx::connect_direct>::~basic_connection()]+0x17): undefined reference to `pqxx::connection_base::close()' 
collect2: ld returned 1 exit status 

如果我喜欢:

$ g++ -I /usr/local/include/pqxx -L /usr/local/lib/ -l pqxx -l pq xx.cpp 

返回:

/usr/lib64/gcc/x86_64-slackware-linux/4.4.4/../../../../x86_64-slackware-linux/bin/ld: cannot find -lpq 
collect2: ld returned 1 exit status 

考虑:

$ cat /etc/ld.so.conf 

/usr/local/lib 
/usr/local/pgsql/lib    <-- just symlink to /opt/postgres_home/ 
/opt/postgres_home/lib 
/usr/x86_64-slackware-linux/lib 
/usr/lib64/seamonkey 
/opt/kde3/lib64 
/usr/lib64/jre1.6.0_16/lib/amd64 

我真的不知道自己还能做什么,这是因为:

# ls /opt/postgres_home/lib/libpq*              
/opt/postgres_home/lib/libpq.a  /opt/postgres_home/lib/libpq.so.5.3 
/opt/postgres_home/lib/libpq.so /opt/postgres_home/lib/libpqwalreceiver.so 
/opt/postgres_home/lib/libpq.so.5 

路易斯

回答

9

在与pqxx作者Jeroen T. Vermeulen交换电子邮件后,我可以设法编译'程序'。 当时的想法是之前-lpqxx -lpq 放置xx.cpp所以,整个命令是:

g++ -I /usr/local/include/pqxx/ -L /usr/local/lib/ -I /usr/local/pgsql/include/ -L /usr/local/pgsql/lib/ xx.cpp -lpqxx -lpq 

它现在。

+0

即使我得到未定义的引用,在我的情况下我使用code :: blocks。你有一个修复或一些想法吗? – itsols 2013-06-30 07:02:17

+0

如果你使用g ++会发生什么? – Luis 2013-06-30 09:07:04

2

Works的我是她e用一个简单的g ++ -lpqxx xx.cpp,所以它非常像一个破损的安装。请注意,如果您使用的是共享对象,则不需要使用libpq与libpqxx进行链接,并为此负责。

检查您是否在不同位置安装了libpqxx库,如/ usr/lib,/ usr/local和/ usr/local/pgsql/lib。

+0

感谢您的帮助,但问题不在于您提到的问题。 – Luis 2011-03-14 12:57:07