2009-09-02 7 views
0

MSYS를 사용하여 libpq (postgres 컴파일)를 컴파일했습니다. 나는 libpqxx를 컴파일했다. 이제 libpqxx를 사용할 클라이언트를 만들고 싶습니다. libpq는 정상적으로 작동하는 것처럼 보였다. 그리고 libpqxx로 코드를 컴파일 할 수 있습니다. 그러나 libpq 클라이언트 응용 프로그램을 연결하는 데 실패합니다.MinGW에서 libpqxx를 연결할 수 없습니다


#include <pqxx/pqxx> 
#include <iostream> 
using namespace std; 
using namespace pqxx; 

int main() { 
    connection Conn("dbname=test"); 
    cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!! 
    return 0; 
} 

내가 갑자기 일하는 것이 헛된 희망에있는 링크에 libs와의 무리를 추가 :

여기 내 코드입니다. 여기 내가 지금까지 가지고있는 것 :

 
g++ -IC:\msys\1.0\local\pgsql\include -IC:\msys\1.0\local\include -O0 -g3 -Wall -c -fmessage-length=0 -osrc\Controller.o ..\src\Controller.cpp 
g++ -LC:\MinGW\lib -LC:\msys\1.0\local\pgsql\lib -LC:\msys\1.0\local\lib -oController.exe src\Controller.o -lws2_32 -lole32 -lpqxx -lpq -loleaut32 -luuid 
C:\msys\1.0\local\lib/libpqxx.a(connection_base.o): In function `ZN45_GLOBAL__N__ZN4pqxx16encrypt_passwordERKSsS1_7wait_fdEibP7timeval': 
C:/msys/1.0/home/rsolomon/libpqxx/libpqxx-3.0.2/src/connection_base.cxx:1434: undefined reference to `[email protected]' 
C:\msys\1.0\local\lib/libpqxx.a(connection_base.o): In function `ZN4pqxx15connection_base12check_resultERKNS_6resultE': 
C:/msys/1.0/home/rsolomon/libpqxx/libpqxx-3.0.2/src/connection_base.cxx:420: undefined reference to `[email protected]' 
collect2: ld returned 1 exit status 
Build error occurred, build is stopped 
Time consumed: 1770 ms. 

나는 "select @ 20"을 주어야한다고 생각한다. 링커가 왜 그렇게 위태입니까?

답변

2

유닉스 링커는 전통적으로 라이브러리를 왼쪽에서 오른쪽으로 처리합니다. 따라서 먼저 ws2_32을 고려하고, 많이 사용하지 않았 음을 확인한 다음 pqxx로 이동하여 select가 정의되지 않았고 이후 라이브러리에서 정의되지 않았 음을 확인합니다. IOW, ws2_32을 명령 줄의 끝으로 옮겨보십시오.

+0

와우! 그것은 효과가 있었다. 그래서, -l의 순서는 내가 처음 사용하는 특정 라이브러리에서부터 가장 이행 라이브러리에 이르기까지 지속되어야합니다. 나는 그것이 어려운 길에서 그 하나를 발견했다고 생각한다. – User1

+0

같은 lib 디렉토리에 두 번 -l이 필요합니까? – User1

+1

유닉스는 전통적으로 널리 사용되지는 않지만 토폴로지 순서를 계산하기 위해 tsort (1)을 사용합니다 ... 어떤 경우에도 라이브러리간에 순환 종속성이 있다면 라이브러리를 두 번 추가해야 할 수도 있습니다. 귀하의 도서관이 적절하게 쌓여 있다면. –

관련 문제