编译步骤(x86版本)
1.下载并安装postgresql,点击进入下载地址。下载界面如下:
目前最新版本是9.5.1,我下载了 Win x86-32 的最新版本。安装后目录如下:
2.下载并解压缩libpqxx,点击进入下载地址。下载界面如下:
目前最新版本是4.0.1,我下载了libpqxx-4.0.1.tar.gz 压缩包。解压后目录如下:
3.编译环境准备。(安装或解压路径请以实际的为准,本文路径仅供参考)
- 进入libpqxx的解压路径 D:\Program Files (x86)\libpqxx-4.0.1\win32 ,将该路径下的common-sample文件另存为common文件
- 打开并删除上述common文件原有全部内容,然后将以下代码复制到common文件中并保存。
- # Common options for Visual C++ makefiles to build libpqxx and its regression
- # test.
- # THE ORIGINAL OF THIS FILE IS CALLED common-sample; DON'T EDIT THE ORIGINAL or
- # you may lose your changes when you upgrade your libpqxx sources.
- # Instead, copy "common-sample" to "common" and edit just the file "common".
- # Caution: on Windows, some environments, such as the "make" that comes with
- # Visual C++, expect you to use backslashes as path separators (for example,
- # "C:\src\libpqxx") whereas others like MinGW want you to use more conventional
- # slashes (as in "C:/src/libpqxx").
- # Standard library namespace.
- # There are only two reasons why you might want to change this:
- #
- # 1. Your compiler doesn't define the standard library in the "std" namespace
- # but in the global namespace, in which case PGSTD should be the empty string.
- # However, a compiler with that problem is not likely to be good enough to
- # compile libpqxx.
- #
- # 2. You are using a third-party standard library implementation such as
- # STLport, which lives in another namespace to avoid clashes with the
- # implementation that came with the compiler.
- #
- # In the latter case, PGSTD must be set to the namespace used by your preferred
- # implementation. In all other cases, just leave this set to "std".
- STD="std"
- # If you are using a 3rd-party STL like STLport, remember to check your path
- # and be sure the STLport is included before the MSVC includes. VCVARS32.BAT
- # doesn't know anything about the directories as defined in the IDE. I use
- #
- # set INCLUDE=\Utility\Code\STLport-4.5\stlport;%INCLUDE%
- #
- # ...and set STD to "_STL".
- # Depending on your STL library min/max need to be defined. Using STLport
- # there is no need for libpqxx to redefine these for me.
- # The next line gives us the directory under which all PostgreSQL include
- # directories, DLLs and LIB files can be found.
- #
- # If you built PostgreSQL from source, this is probably the only line you
- # will need to change.
- #
- # If you installed PostgreSQL using the One Click Installer from EnterpriseDB,
- # comment out the following line and uncomment the line after it.
- #
- # Edit the appropriate line to match your specific installation.
- #PGSQLSRC="C:\Sources\postgresql-9.1.1\src"
- PGSQLSRC="D:\Program Files (x86)\PostgreSQL\9.5"
- # This is the directory where the Postgres header files, e.g. postgres_ext.h,
- # are found.
- PGSQLINC=$(PGSQLSRC)\include
- # This is the directory where the libpq header files, e.g. libpq-fe.h,
- # are found. If you used the One Click Installer, comment out the next line
- # and uncomment the one following it:
- #LIBPQINC=$(PGSQLSRC)\interfaces\libpq
- LIBPQINC=$(PGSQLSRC)\include
- # This is the directory where the release build of the libpq DLL
- # and its corresponding LIB file are found, as well as the names of
- # those two files.
- #
- # If you installed PostgreSQL using the One Click Installer from EnterpriseDB,
- # comment out the next three lines and uncomment the following three:
- #LIBPQPATH=$(PGSQLSRC)\interfaces\libpq\Release
- #LIBPQDLL=libpq.dll
- #LIBPQLIB=libpqdll.lib
- LIBPQPATH=$(PGSQLSRC)\lib
- LIBPQDLL=libpq.dll
- LIBPQLIB=libpq.lib
- # This is the directory where the debug build of the libpq DLL
- # and its corresponding LIB file are found, as well as the names of
- # those two files.
- #
- # NOTE: If you don't have access to a debug build of libpq, just
- # provide the same information as above here. The debug builds of
- # libpqxx will reference the release version of libpq, which will
- # only limit your ability to debug libpq sources but otherwise should
- # work just fine.
- #
- # If you installed PostgreSQL using the One Click Installer from EnterpriseDB,
- # comment out the next three lines and uncomment the following three.
- #LIBPQDPATH=$(PGSQLSRC)\interfaces\libpq\Debug
- #LIBPQDDLL=libpqd.dll
- #LIBPQDLIB=libpqddll.lib
- LIBPQDPATH=$(PGSQLSRC)\lib
- LIBPQDDLL=libpq.dll
- LIBPQDLIB=libpq.lib
- 进入libpqxx的解压路径 D:\Program Files (x86)\libpqxx-4.0.1\config\sample-headers\compiler\VisualStudio2010\pqxx ,将该路径下的全部头文件拷贝到目录 D:\Program Files (x86)\libpqxx-4.0.1\include\pqxx中
- 进入libpqxx的解压路径 D:\Program Files (x86)\libpqxx-4.0.1\config\sample-headers\libpq\9.0\pqxx ,将该路径下的全部头文件拷贝到目录 D:\Program Files (x86)\libpqxx-4.0.1\include\pqxx中
- 进入libpqxx的解压路径 D:\Program Files (x86)\libpqxx-4.0.1\src ,打开 largeobject.cxx 源文件,在第34行加入头文件#include <algorithm>
4.开始编译。(安装或解压路径请以实际的为准,本文路径仅供参考)
- 在开始菜单选择Visual Studio 2013的开发人员命令提示工具,并以管理员方式运行,然后直接运行命令:vcvars32.bat
- 将命令提示工具定位到 libpqxx 的解压路径: D:\Program Files (x86)\libpqxx-4.0.1
- 最后在命令提示工具中直接运行命令:nmake /f win32/vc-libpqxx.mak ALL,即可开始编译。
- 编译成功后,所生成的静态库以及动态库,包括DEBUG版本和RELEASE版本,全部都在如下目录中:
常见编译错误
- 提示缺少头文件。
- 提示类似错误:error U1077: 'copy' : return code '0x1'。
- 提示类似错误: min() 或者 max() 不是std 的标准函数。
- 提示一堆无法解析的外部函数。
补充:
- 如果是编译64位的libpqxx, 请使用文本编辑器编译打开win32\vc-libpqxx.mak 文件,将
- LINK_FLAGS_BASE=kernel32.lib ws2_32.lib advapi32.lib /nologo /dll /machine:I386 shell32.lib secur32.lib wldap32.lib
- 修改为
- LINK_FLAGS_BASE=kernel32.lib ws2_32.lib advapi32.lib /nologo /dll /machine:x64 shell32.lib secur32.lib wldap32.lib
- 如果选择的是Visual Studio 2015, 可使用 VS2015 开发人员命令提示,当然还可以使用X86,x64兼容工具命令提示符,并以管理员方式运行
- 运行命令:
- "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64\nmake.exe" /f win32/vc-libpqxx.mak ALL.
关于 libpgxx 更多的编译选项及编译说明,请参照 libpqxx 解压路径 Win32 目录下的common,INSTALL.TXT 以及 vc-libpgxx.mak 等文件。
本文由VS软件圈(vssoft.net)发布,不代表VS软件圈立场,转载联系作者并注明出处:https://vssoft.net/vsazwt/VS2013anzhuangwenti/2020/0725/3479.html