无法在MinGW中链接libpqxx

时间:2009-09-02 03:10:09

标签: c++ postgresql mingw libpqxx

使用MSYS,我编译了libpq(来自编译postgres)。然后我编译了libpqxx。现在,我想创建一个使用libpqxx的客户端。 libpq似乎工作正常。而且,我可以用libpqxx编译代码。但是,链接libpq客户端应用程序失败。

这是我的代码:


#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;
}

我在链接中添加了一堆lib,徒劳地希望它会突然发挥作用。这是我到目前为止所做的:

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 `select@20'
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 `select@20'
collect2: ld returned 1 exit status
Build error occurred, build is stopped
Time consumed: 1770  ms.  

我在想-lws2_32应该给我“select @ 20”。为什么链接器如此高效?

1 个答案:

答案 0 :(得分:2)

Unix链接器传统上从左到右处理库。所以它首先考虑ws2_32,发现它没有多大用处,然后继续使用pqxx,并且看到select是未定义的,并且没有被任何后面的库定义。 IOW,尝试将ws2_32移动到命令行的末尾。