使用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 \ 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):在函数`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”。为什么链接器如此令人讨厌?

最佳答案

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

10-08 03:56