2011-03-13 4 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

+0

g ++를 사용하면 어떻게됩니까? – Luis

2

작품에 대한 나 그녀 e를 간단한 g ++ -lpqxx xx.cpp와 함께 사용하면 망가진 설치처럼 보입니다. 공유 객체를 사용하는 경우 libpqxx가 사용자를 대신해서 처리하므로 libpq와 링크 할 필요가 없습니다.

/usr/lib,/usr/local 및/usr/local/pgsql/lib와 같은 다른 위치에 libpqxx 라이브러리가 설치되어 있지 않은지 점검하십시오.

+0

도움 주셔서 감사합니다.하지만 언급 한 문제가 아닙니다. – Luis

관련 문제