[转]Windows环境下编译生成libpq

Windows环境下编译生成libpq
编译的时候,首先需要理解的是像VC IDE这样的集成开发环境,其实是调用了nmake这样的编译工具来编译工程项目文件,和linux下面的make其实是一样的。make在编译的时候调用了cl等编译工具,这个和make调用了cc等编译工具也是一样的,简单的来讲,就是这些编译方式在windows下面和在linux下面是完全一样的。
这次碰到的最大问题就是总是找不到nmake工具还有他调用的一些库,这些按理来讲,都是在VC IDE安装完成以后自动添加到windows的环境变量里面的,但是这次没有,所以我很是花了一些时间来弄这个。
以下是整个的编译过程介绍:

1、添加windows环境变量
      a) 在include变量里面补充了:
D:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\include\;D:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include;D:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include   
      b) 在lib变量里面补充了:
D:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Lib\;D:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE;D:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Lib;D:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\lib
      c) 在path变量里面补充了:
D:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE
当然最简单的方法就是调用D:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Tools\vsvars32.bat这个bat文件,用来设置环境变量。
 
2、开始编译
cd进入{PGHOME}\src目录,执行nmake /f win32.mak命令后,在{PGHOME}\src\interfaces\libpq\Release目录里生成libpq.lib和libpq.dll。
PS:    {PGHOME}为PostgreSQL所在位置。

3、添加工程文件
注意一定要将postgresql目录下面的{PGHOME}\src\include以及{PGHOME}\interfaces\libpq这两个目录作为include目录加到项目里面,
否则是编译通过不了的。

4、一个简单的例子
#include "stdafx.h"
#include "language.h"
#include "libpq/libpq-fe.h"

void verifyCCon()
{
    const char *conninfo;
    PGconn     *conn;
    PGresult   *res;
    PGnotify   *notify;
    int              nnotifies;
    conninfo = "host=localhost hostaddr=127.0.0.1 port=5432 dbname=FlowRecord user=postgres password=netflow";
    /* 和数据库建立链接 */
    conn = PQconnectdb(conninfo);

    /*
    * 检查一下与服务器的连接是否成功建立
    */
    if (PQstatus(conn) != CONNECTION_OK)
    {
        std::cout<<"Connection to database failed:"<<PQerrorMessage(conn);
    }
    else
    {
        std::cout<<"Connection to database success!"<<endl;
    }
}

int _tmain(int argc, _TCHAR* argv[])
{
    language l("forest");
    cout<<l.getLan()<<endl;
    cnLan cnL("forest");
    cout<<cnL.getName()<<endl;

    verifyCCon();

 

    return 0;
}

posted on 2007-03-07 15:00  高血压的熊  阅读(918)  评论(0编辑  收藏  举报