0

使用 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;
}

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

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\控制器.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):在函数“ZN45_GLOBAL__N__ZN4pqxx16encrypt_passwordERKSsS1_7wait_fdEibP7timeval”中:
C:/msys/1.0/home/rsolomon/libpqxx/libpqxx-3.0.2/src/connection_base.cxx:1434:未定义对“select@20”的引用
C:\msys\1.0\local\lib/libpqxx.a(connection_base.o):在函数“ZN4pqxx15connection_base12check_resultERKNS_6resultE”中:
C:/msys/1.0/home/rsolomon/libpqxx/libpqxx-3.0.2/src/connection_base.cxx:420:未定义对“select@20”的引用
collect2: ld 返回 1 个退出状态
发生构建错误,构建已停止
消耗时间:1770 毫秒。  

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

4

1 回答 1

2

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

于 2009-09-02T03:36:57.633 回答