Problem compiling a program with pqxx

I am trying to compile a very simple program (a sample that does nothing) with pqxx, but cannot do this. Here is the "program":

$ cat xx.cpp

#include <pqxx/pqxx> using namespace pqxx; int main() { connection conn("dbname=dout1"); return 0; } 

The command I tried to compile in 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 

Message returned:

 /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 

If I like:

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

Return:

 /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 

Considering:

 $ 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 

I really don't know what else to do, because:

  # 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 

Louis

+4
source share
2 answers

After exchanging the email with pqxx author Jeroen T. Vermeulen, I managed to compile the β€œprogram”. The idea was to place xx.cpp before -lpqxx -lpq So, the whole command:

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

Now it works.

+9
source

Works for me here with simple g ++ -lpqxx xx.cpp, so it looks terribly like a broken installation. Please note that you do not need to contact libpq, since libpqxx takes care of this for you if you use shared objects.

Make sure the libpqxx library is not installed in different places, for example / usr / lib, / usr / local and / usr / local / pgsql / lib.

+2
source

Source: https://habr.com/ru/post/1343524/


All Articles