编译gdal
gdal
修改nmake.opt为如下
# Uncomment for GEOS support 开启geos
GEOS_DIR=C:\code\geos-3.3.1
GEOS_CFLAGS = -I$(GEOS_DIR)/capi -I$(GEOS_DIR)/include -DHAVE_GEOS
GEOS_LIB = $(GEOS_DIR)/src/geos_c_i.lib (console编译geos的)
GEOS_LIB = $(GEOS_DIR)/src/geos_c.lib (vc编译geos的)
64位则GEOS_LIB = $(GEOS_DIR)/lib/debug/geos_c.lib,还要把平台改成x64才可
# PROJ.4 stuff
# Uncomment the following lines to link PROJ.4 library statically. Otherwise
# it will be linked dynamically during runtime.
PROJ_FLAGS = -DPROJ_STATIC
PROJ_INCLUDE = -IC:\code\proj-4.7.0\src
PROJ_LIBRARY = C:\code\proj-4.7.0\src\proj_i.lib
# PostGIS Libraries 开启postgressql
PG_INC_DIR = C:\code\postgresql-9.1\include
PG_LIB = C:/code/postgresql-9.1/lib/libpq.lib wsock32.lib
# Uncomment for Expat support (required for KML, GPX and GeoRSS read support). 开启expat,支持kml,gpx
EXPAT_DIR = "C:\code\expat-2.0.1"
EXPAT_INCLUDE = -I$(EXPAT_DIR)/lib
EXPAT_LIB = $(EXPAT_DIR)/win32/bin/debug/libexpat.lib
# DWG support using the Open Design Alliance Teigha Libraries
TD_BASE = C:\code\TX_SDK_3.05.0.0
TD_FLAGS = -D_TOOLKIT_IN_DLL_
TD_INCLUDE = -I$(TD_BASE)\TD\Include -I$(TD_BASE)\TD\Extensions\ExServices
TD_LIBDIR = $(TD_BASE)\lib\vc8dll
先console执行
nmake /f makefile.vc
nmake /f makefile.vc install
nmake /f makefile.vc devinstall
此方法应该是生成release版本,会有dll和lib,但没有pdb
然后vc里直接f7生成debug和pdb文件,不需要rebuild(重新生成解决方案),此方法的pdb可加载但不能调试-_-!!!
最终还得在vc下rebuild all一下,才可。将debug的dll拷到exe目录,即可加载符号pdb
#####
gdal19测试默认无debug编译,需要加上MSVC_VER=1400 DEBUG=1在vc中,或是在console上加入 /d DEBUG=1编译才可出pdb文件
#####
64bit:
还要把平台改成x64才可
1:在GDAL目录下的nmake.opt文件中,找到SYM_PREFIX的定义,
应该在438行左右将SYM_PREFIX=_ 改为SYM_PREFIX= 就是将最后的下划线去掉
2:在GDAL目录下的makefile.vc文件中,找到46行左右的代码,如下:
BASE_INCLUDE = /INCLUDE:_GDALSimpleImageWarp@36 /
/INCLUDE:_GDALReprojectImage@48 /
/INCLUDE:_GDALComputeMedianCutPCT@32 /
/INCLUDE:_GDALDitherRGB2PCT@28 /
/INCLUDE:_OCTNewCoordinateTransformation@8 $(VB6_SAFEARRAYSYM)
修改为:
BASE_INCLUDE = /INCLUDE:$(SYM_PREFIX)GDALSimpleImageWarp /
/INCLUDE:$(SYM_PREFIX)GDALReprojectImage /
/INCLUDE:$(SYM_PREFIX)GDALComputeMedianCutPCT /
/INCLUDE:$(SYM_PREFIX)GDALDitherRGB2PCT /
/INCLUDE:$(SYM_PREFIX)OCTNewCoordinateTransformation $(VB6_SAFEARRAYSYM)
就是将后面的@开始,后面的数字删除。
PS:最新版的GDAL1.73版本直接可以在VS2008(VS2005也应该可以,没有测试)中选择x64编译,是直接可以编译过去的。前提是需要修改nmake.opt大概第一百行左右中的,Win64 = yes
-------------------------------
创建gdal64位c#dll
使用swig1.3.39,生成命令行在vc中改为如下
cd $(ProjectDir) && nmake -f makefile.vc MSVC_VER=1500 DEBUG=1 && nmake -f makefile.vc MSVC_VER=1500 DEBUG=1 install
cd C:\code\gdal-1.8.0\gdal-1.8.064bit
nmake /f makefile.vc install
nmake /f makefile.vc devinstall
cd swig
cd csharp
nmake /f makefile.vc interface
nmake /f makefile.vc
-----------------------------------------------------------
postgis
先修改postgis.vsprops中的4个宏定义,分别指向各自的路径
GEOS_SRC_ROOT = D:\dev\geos\_svn\trunk
PROJ4_SRC_ROOT = D:\dev\proj\_svn\trunk
POSTGRESQL_SRC_ROOT = D:\dev\postgresql\postgresql-8.3.6
POSTGRESQL_ROOT = C:\Program Files\PostgreSQL\8.3
先编译liblwgeos
===================================
20170703
gdal 2.2.1
解压缩,在nmake.opt中修改内容
release版
# Uncomment for GEOS support (GEOS >= 3.1.0 required)
GEOS_DIR=D:\code\geos-3.6.1
GEOS_CFLAGS = -I$(GEOS_DIR)/capi -I$(GEOS_DIR)/include -DHAVE_GEOS
GEOS_LIB = $(GEOS_DIR)\sln\lib\Release\geos_c.lib
# PROJ.4 stuff
# Uncomment the following lines to link PROJ.4 library statically. Otherwise
# it will be linked dynamically during runtime.
PROJ_FLAGS = -DPROJ_STATIC
PROJ_INCLUDE = -ID:\code\proj-4.9.3\src
PROJ_LIBRARY = D:\code\proj-4.9.3\sln\lib\Release\proj_4_9.lib
# Uncomment for Expat support (required for KML, GPX and GeoRSS read support).
EXPAT_DIR = "D:\code\expat-2.2.1"
EXPAT_INCLUDE = -I$(EXPAT_DIR)/lib
EXPAT_LIB = $(EXPAT_DIR)/sln/Release/expat.lib
debug版
# Uncomment for GEOS support (GEOS >= 3.1.0 required)
GEOS_DIR=D:\code\geos-3.6.1
GEOS_CFLAGS = -I$(GEOS_DIR)/capi -I$(GEOS_DIR)/include -DHAVE_GEOS
GEOS_LIB = $(GEOS_DIR)\sln\lib\debug\geos_c.lib
# PROJ.4 stuff
# Uncomment the following lines to link PROJ.4 library statically. Otherwise
# it will be linked dynamically during runtime.
PROJ_FLAGS = -DPROJ_STATIC
PROJ_INCLUDE = -ID:\code\proj-4.9.3\src
PROJ_LIBRARY = D:\code\proj-4.9.3\sln\lib\debug\proj_4_9_d.lib
# Uncomment for Expat support (required for KML, GPX and GeoRSS read support).
EXPAT_DIR = "D:\code\expat-2.2.1"
EXPAT_INCLUDE = -I$(EXPAT_DIR)/lib
EXPAT_LIB = $(EXPAT_DIR)/sln/debug/expatd.lib
复制D:\code\geos-3.6.1\include\geos\version.h.vc,重命名为version.h,即去掉.vc
使用vc的64位console
nmake /f makefile.vc MSVC_VER=1910 WIN64=1 编译release版本的dll
修改nmake.opt中
!IFNDEF GDAL_HOME
GDAL_HOME = "D:\code\gdal-2.2.1"
!ENDIF
后
nmake /f makefile.vc install MSVC_VER=1910 WIN64=1
nmake /f makefile.vc devinstall MSVC_VER=1910 WIN64=1
即完成,然后手动将bin,lib,include拷贝到别处,否则再编译debug版就覆盖了
编译debug的就在命令后面加上 debug=1 with_pdb=1
=======================================
20170816补充编译c#步骤
1) D:\code\gdal-2.2.1\swig\csharp>nmake /f makefile.vc MSVC_VER=1910 interface
2)将\swig\csharp下的gdal、ogr、osr里的每个cs代码前加入
namespace OSGeo.GDAL {
using System;
using System.Runtime.InteropServices;
using System.Security;
[SecuritySafeCritical]
public class
3)删除OsrPINVOKE,OgrPINVOKE,GdalPINVOKE,里重复的构造函数
修改band.cs的17行将BandUpcast换为Band_SWIGUpcast
修改dataset.cs的17行将DatasetUpcast换为Dataset_SWIGUpcast
修改Driver.cs的17行将DriverUpcast换为Driver_SWIGUpcast
4) D:\code\gdal-2.2.1\swig\csharp>nmake /f makefile.vc MSVC_VER=1910 WIN64=1
5) 创建c#项目,将4个xxx_csharp的dll加入到引用,然后将xxx_wrap.dll以及gdal、geos等dll复制到debug或release目录中,最后将项目平台改为x64,允许不安全代码

浙公网安备 33010602011771号