GDAL源码剖析(二)之编译说明

2023-11-02

 

转载自: http://blog.csdn.net/liminlu0314/article/details/6937194

一、简单的编译

1、使用VisualStudio IDE编译

首先进入GDAL的源代码目录,可以看到有几个sln为后缀的文件名,比如makegdal10.sln,makegdal80.sln,makegdal71.sln,makegdal90.sln 。这些文件是VisualStudio的工程文件,后面的数字对应的VS的版本号,71表示的VS2003,80表示VS2005,90表示VS2008,还有10表示VS2010等。根据自己电脑安装的VS版本,打开对应的文件,如下图所示(使用VS2008SP1版本,打开makegdal90.sln文件):


图3 VS2008打开编译GDAL1.8.1

然后在左侧解决方案右键,弹出菜单中选择“生成”或者“重新生成”命令,然后GDAL就会开始编译,等待输出窗口中提示,执行完成,生成成功等信息后,就表示GDAL已经完成编译。同时会在GDAL的源代码目录中会出现gdal.lib,gdal_i.lib,gdal18.dll等文件,如果你没有修改GDAL中的nmake.opt文件的话,那么同时会在你的C盘中会出现一个叫“C:\warmerda\bld”的文件夹,里面会包含三个文件夹,分别是bin,data和html。其中bin文件夹中存放的是编译出来的GDAL的可执行程序,包括GDAL提供的十几个工具集;data文件夹就是在第一节中的介绍的data文件夹;html文件夹中存放的是各种数据格式的说明文档。

2、使用cmd命令行编译

使用cmd命令行编译,首先在“开始菜单\所有程序\Microsoft Visual Studio 2008\Visual Studio Tools\ Visual Studio 2008命令提示”,点击“Visual Studio 2008 命令提示”会弹出下面的界面:

然后使用cd命令,切换到GDAL的源代码目录,如下图所示:


切换到GDAL的源代码目录后,依次敲入下面的命令行后回车,等待编译结束即可。

nmake -f makefile.vc

nmake -f makefile.vc install

nmake -f makefile.vc devinstall

同时还有其他的命令,如:

nmake -f makefile.vc clean

nmake -f makefile.vc MSVC_VER=1400clean

nmake -f makefile.vc MSVC_VER=1400DEBUG=1

       上面六行的命令含义依次是:

编译GDAL库

编译GDAL库,并安装(这里安装的意思就是将生成的dll,exe等文件拷贝到C:\warmerda\bld目录),

编译GDAL库,并安装开发者模式(安装的意思同上,开发者模式意思是将开发用的include文件夹中的头文件和lib文件一同拷贝到C:\warmerda\bld目录,此时会在C:\warmerda\bld目录中多出来两个文件夹,分别是include和lib,分别存放的是GDAL的头文件和lib文件,用于调用GDAL库使用)。

清理GDAL库,同时会删除编译GDAL库所生成的临时文件,作用相当于在VS环境中的清理命令。

作用同上,但是添加了一个MSVC_VER=1400,表示使用VS2005编译。

编译GDAL库的debug模式,可以用来调试GDAL源码。

二、自定义编译

GDAL的强大之处不单单在于可以读取栅格和矢量数据,同时它的强大之处还在于下面几个方面,第一可以进行矢量图形之间的一些常用操作,比如:求交,求并,缓冲区等等。第二可以进行投影和坐标转换。如果使用GDAL默认的编译方式,那么上述的两个非常强大的功能您将不能使用,因为GDAL这两大功能是基于另外的两个开源库GEOS(Geometry Engine, Open Source)库和PROJ4库来实现的。下面对这两大库分别做一个简单的说明,以及如何修改编译文件,让GDAL能够拥有这两大功能。

1、集成GEOS

关于GEOS库的说明,网上有很多,同时在GEOS的官网http://geos.osgeo.org有详细的说明,简单的来说,GEOS提供了OGC规范中简单几何要素对象操作的C++语言的实现。在地理信息系统领域,拓扑模型是重要的,其计算方法简单但是很难得以实现。使得GEOS不同于其他项目的也正是“空间谓词”与“空间操作”。空间谓词是比较两个空间对象并返回一个布尔变量值作为结果,它表明了存在于两个空间对象之间特殊的关系。比如典型的空间谓词有Contains(), Intersects(), Touches(), andCrosses()函数等。GEOS项目中对该些函数的实现是异常强壮的,即使是奇异几何对象或是临时的坐标系统运算也不能使其运算不正常或计算错误。目前绝大多数的商业软件仍然在最基础的空间谓词处理上相对成熟,这正是GEOS项目的重要意义。“空间操作”则主要是对两个几何对象进行计算并且返回一个新的几何实体。比较典型的操作函数如Difference(), Union()以及Buffer()等。GEOS中的操作算法已经被广泛的经过了测试。GEOS类库被各类开源空间信息软件项目广泛应用,使用GEOS,它们可以基于最新的规范的几何实体来完成,同时也拥有了复杂空间方法的实现。

关于GEOS的说明和编译,后面会单独写一篇文件进行介绍,这里假设已经下载的是编译好的GEOS库。

首先使用记事本或者其他的文本编辑器打开GDAL源代码目录下的nmake.opt文件,找到“# Uncomment for GEOS support”这句,大概在405行左右,将下面三行代码:

#GEOS_DIR=C:/warmerda/geos

#GEOS_CFLAGS =-I$(GEOS_DIR)/capi -I$(GEOS_DIR)/source/headers -DHAVE_GEOS

#GEOS_LIB     =$(GEOS_DIR)/source/geos_c_i.lib

修改为:

GEOS_DIR=F:\Work\3rdPart\geos-3.2.2

GEOS_CFLAGS =-I$(GEOS_DIR)/capi -I$(GEOS_DIR)/source/headers -DHAVE_GEOS

GEOS_LIB     = $(GEOS_DIR)/source/geos_c_i.lib

其中F:\Work\3rdPart\geos-3.2.2是我本机的GEOS存放的主目录,后面两行设置的是GEOS的头文件目录和lib文件路径。设置好后保存即可。对比结果如下图如下:


保存完nmake.opt之后,按照第一步中的编译方式进行编译即可。编译后的GDAL就将会支持图形之间的操作等处理。函数主要是在OGR库中,后面会在OGR库中进行详细的介绍说明。编译后,千万别忘记将geos_c.dll文件拷贝到gdal18.dll的同级目录下,否则会提示你找不到geos_c.dll文件。

2、集成Proj4

Proj4是一套开源的坐标投影转换类库,它可以完成在两套不同制图投影系统之间的转换,同样不同的椭球体或大地基准面之间也可以成功的完成转换。GDAL中用到的坐标转换,投影转换,几何纠正,正射纠正等算法,都离不开坐标转换,也就是说要使用这些算法,必须有proj4库的支持才行。同GEOS库的配置方法,在nmake.opt文件中,找到proj4库的位置,大概在352行左右。将下面的三行代码:

#PROJ_FLAGS =-DPROJ_STATIC

#PROJ_INCLUDE =-Id:\projects\proj.4\src

#PROJ_LIBRARY =d:\projects\proj.4\src\proj_i.lib

修改为:

#PROJ_FLAGS =-DPROJ_STATIC

PROJ_INCLUDE =-IF:\Work\3rdPart\proj-4.7.0\src

PROJ_LIBRARY =F:\Work\3rdPart\proj-4.7.0\src\proj_i.lib

其中第一行表示是否使用静态链接的方式,第二行的路径表示,proj库存放的位置,第三行为proj库的lib文件所在路径。修改后保存即可,对比结果如下图如下:


同GEOS库一样,保存完nmake.opt之后,按照第一步中的编译方式进行编译即可。对于Proj库的使用后面会在有一篇文章对其做一个简单的介绍说明。编译后,同样千万别忘记将proj.dll文件拷贝到gdal18.dll的同级目录下,否则会提示你找不到proj.dll文件。

3、集成HDF数据读取

通过上面GEOS和PROJ库的介绍,相信对gdal的配置文件,nmake.opt有一个比较初步的了解了吧,那么下面对于使用GDAL支持hdf数据的读取也是同样,先下载好hdf4和hdf5的库,我用的是HDF4.2.6和HDF5-1.8.7两个库,在hdf的官方网上有编译好的库,直接下载编译好的库即可,对于hdf库的编译,我没有进行编译过,应该和其他的开源库都是差不多吧。同时官网提供了32位的库和64位的库,这里都是按照32位的库进行介绍,后面会有一个gdal的64位库的编译介绍。

将下载好的HDF4.2.6和HDF5-1.8.7两个库解压,然后修改nmake.opt文件中的278行左右,代码如下:

# Uncomment thefollowing and update to enable NCSA HDF Release 4 support.

#HDF4_PLUGIN = NO

#HDF4_DIR =       D:\warmerda\HDF41r5

#HDF4_LIB =        /LIBPATH:$(HDF4_DIR)\lib Ws2_32.lib

 

# Uncomment thefollowing and update to enable NCSA HDF Release 5 support.

#HDF5_PLUGIN = NO

#HDF5_DIR =       c:\warmerda\supportlibs\hdf5\5-164-win

#HDF5_LIB =        $(HDF5_DIR)\dll\hdf5dll.lib

修改为下面的代码:

# Uncomment thefollowing and update to enable NCSA HDF Release 4 support.

HDF4_PLUGIN = NO

HDF4_DIR =          F:\Work\3rdPart\HDF4.2.6_win_x86

HDF4_LIB =  $(HDF4_DIR)\dll\hd426m.lib$(HDF4_DIR)\dll\hm426m.lib \

$(HDF4_DIR)\lib\hd426.lib$(HDF4_DIR)\lib\hm426.lib Ws2_32.lib

 

# Uncomment thefollowing and update to enable NCSA HDF Release 5 support.

HDF5_PLUGIN = NO

HDF5_DIR =          F:\Work\3rdPart\HDF5-1.8.7_win_x86

HDF5_LIB = $(HDF5_DIR)\dll\hdf5dll.lib

对比代码如下图:


保存,然后编译gdal即可,同时将hdf库中的dll文件夹下的dll文件拷贝到gdal18.dll的同级目录下。

三、其他方面

1、makegdal_gen.bat使用

对于makegdal_gen.bat的作用,在上一篇文章中已经进行了介绍,下面对怎么使用该文件生成VS的工程文件做一个说明。

首先打开cmd命令行窗口,使用cd命令切换到GDAL源代码目录,然后输入makegdal_gen.bat回车,会得到该工具的一个简单实用帮助,如下图所示:

      

该工具的使用方法是带有命令行参数的一个批处理工具,(在后面对GDAL工具集的介绍中会对带有参数的命令行程序,以及编写带有命令行的程序有一个比较详细的说明)。通过上图可以看出该工具的基本语法是:

makegdal_gen 7.10 >makegdal71.vcproj

makegdal_gen 8.00 >makegdal80.vcproj

通过上面的示例可以看出,该工具的命令行参数分别是,首先是VS的版本号,具体版本号参考本文第一小节,然后跟一个大于号“>”,最后是输出的VS的工程的名字。那么现在我要使用该命令行生成一个VS2008版本的工程文件,我可以输入下面的命令,然后回车即可:

makegdal_gen 9.00 >makegdal90.vcproj

2、编译64位系统下的GDAL

对于GDAL的64位系统的编译,基本和32位系统的编译一样,首先在VS的工程中,打开配置管理器,然后再活动解决方案平台的下拉列表中选择新建,然后弹出,新建解决方案平台对话框,选择新平台为x64(需要在安装VS的时候安装64位的编译环境),然后点击确定即可。最后在VS中选择X64进行编译即可。如下图所示:


对于使用cmd命令行编译,基本同本文开始,不一样的只有,在开始菜单选择的不是“Visual Studio 2008 命令提示”而是“Visual Studio 2008 x64 兼容工具命令提示”,剩下的编译步骤跟前面的一样。

在编译开始之前,还需要打开nmake.opt文件,找到131行处的“#WIN64=YES”,将前面的“#”去掉,保存,然后开始编译。如果就这样编译过去的话,那么恭喜你,如果不能顺利编译过去的,那么需要按照下面的步骤进行一点点设置。

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)

就是将后面的@开始,后面的数字删除。现在开始编译吧,呵呵。祝你成功!此处可以参考我的博文:http://liminlu0314.blog.163.com/blog/static/111800520106223508717/

3、GDAL1.8后打开中文路径失败问题

此处可以参考我的博文:http://blog.csdn.net/liminlu0314/article/details/6610069,在此不再赘述。

第二篇完,后续文章陆续奉上,敬请期待新作!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GDAL源码剖析(二)之编译说明 的相关文章

  • 未找到入口点

    当我尝试运行链接到 DLL 的应用程序 我有一段时间没有更改代码 因为它工作正常 时 遇到了一个奇怪的错误 这个 DLL 曾经可以工作 但我一直在更改 DLL 的代码并使其编译正常 不幸的是 当尝试运行该应用程序时 GameTest001
  • Unity HTML5 错误:找不到编码 1252 数据

    我使用的是 Mac 在 Google Chrome 中执行我的小应用程序时 出现 不支持代码页 1252 的 pb 我正在使用Unity 2017 年 6 月测试版为了整合几何健身房IFClib 的编码为 NET 4 6 现在在最后一个 U
  • 根据环境选择目标 32 位或 64 位本机 DLL

    我有一个本机 DLL 有 32 位和 64 位版本 x86 我想创建一个适用于两种体系结构 任何 CPU 的包装器 并根据当前环境 32 位或 64 位 在运行时 加载 DLL 的正确版本 这个过程应该自动发生 这样我的 DLL 的用户就不
  • 如何制作包含DLL文件的JAR文件?

    我购买了一个第三方Java库 其中包括一个JAR文件和两个DLL文件 我编写了自己的 Java 程序来调用第三方 JAR 文件 现在我的问题是如何将我的所有代码打包到一个 JAR 文件中 其中包含我的所有代码以及第三方 JAR 和 DLL
  • 如何使用 DLL 来模拟静态库的“应用程序内全局变量的多个实例”行为?

    我们有一个用 C C 编写的应用程序 它被分解为单个 EXE 和多个 DLL 这些 DLL 中的每一个都使用相同的静态库 utilities lib 实用程序静态库中的任何全局变量实际上在应用程序内运行时都会有多个实例 每个模块 即 DLL
  • 如何在Java程序中调用DLL中的方法

    我正在尝试使用 JNA 调用 DLL 中的方法 到目前为止已经使用加载了DLL Runtime getRuntime load myworkspace test dll 该 dll 包含我需要访问的方法 如何在我的 Java 文件中执行 D
  • 使用 Ruby on Rails ActiveSupport::Concern 功能时如何“嵌​​套”包含模块?

    我正在使用 Ruby 1 9 2 和 Ruby on Rails v3 2 2 gem 鉴于我正在使用 RoR 我想 嵌套 包含模块ActiveSupport 关注 http api rubyonrails org classes Acti
  • Qt 的最佳实践包括和预编译头文件?

    当使用现代和最新的 C 编译器 例如 MSVC2015 并激活预编译头时 当前关于包含 Qt 头文件的 最佳实践 是什么 Example include
  • Unity3D 不安全代码需要指定“unsafe”命令行选项

    我在用Unity3D 4 3并打电话给DLL我创造的 当尝试调用它唯一的函数时 这是 void GetModelReferences int nVertices float vertices int nTriangles int trian
  • 由于 MSVCR110.dll,MS Visual Studio 2012 Ultimate 无法启动

    当我尝试运行 MVS 2012 时 我总是收到错误 在库 DLL MSVCR110 dll 中找不到过程 crtCreateSymbolicLinkW 的入口点 我已经从我的另一台计算机复制了这个 dll 文件 一切正常 但没有帮助0 o
  • 如何从 dll 导出 C++ 类? [复制]

    这个问题在这里已经有答案了 我有一个有两个重载函数的类 如何从 dll 导出它以及如何由其他 C 类使用它 我的班级是这样的 define DECLDIREXP declspec dllexport define DECLDIRIMP de
  • 来自其他位置的 .NET 参考 dll

    我正在根据第三方程序中包含的一些 DLL 制作一个程序 我不被允许自己分发这些 DLL 必须安装第三方程序才能使我的程序运行 我怎样才能引用这些DLL 我通过程序设置的注册表项知道它们的确切位置 我尝试在 Project gt Refere
  • Powershell 调用程序集委托

    我有一个用于过程控制应用程序的 dll 程序集 我在我的内部使用 load电源外壳 script 该DLL包含我需要使用的委托类型 委托名称是 X Y Delegate 我在该 DLL 中有另一个方法 应该这样调用 Method deleg
  • 我如何在 Visual Studio 2012 中同时构建项目(dll 和 lib)

    我设法在 dll 模式和库模式下设置构建项目 但不能同时设置 对于构建在 dll 中 项目 gt 属性 gt 配置类型 动态库 dll 项目 gt 属性 gt 目标扩展名 dll 对于内置库 项目 gt 属性 gt 配置类型 静态库 lib
  • 实体框架、dll、excel

    我用C 编写了Excel使用的dll 该dll是COM注册的 我与 Excel 的连接没有问题 该 dll 使用实体框架 5 从 SQL Server 数据库检索数据 如果我通过控制台应用程序运行该 dll 则该 dll 工作正常 但是当我
  • 防止 Ada DLL 中的名称损坏

    有没有一种简单的方法可以防止在创建 Ada DLL 时 Ada 名称被破坏 这是我的 adb 代码 with Ada Text IO package body testDLL is procedure Print Call is begin
  • 包含目录中的所有文件?

    如何实现以下代码想要实现的目标 include dir In Bash HEADER all headers h echo ifndef ALL HEADERS gt HEADER echo define ALL HEADERS gt gt
  • clojure 要求语法原理

    我很难理解 因此记住 此处描述的 clojure require 语法 http clojuredocs org clojure core 1 3 0 clojure core require http clojuredocs org cl
  • Labview 2011 中的 DLL 加载错误

    我在 LabVIEW 中加载 DLL 时遇到了问题 我正在使用 LabVIEW 连接到流量计 为此 制造流量计的公司非常好地为我提供了一个子 VI 库 这些子 VI 中的每一个都调用该公司提供的两个 DLL 库之一中的函数 因此 这些子 V
  • 是否可以通过 C#.NET 编写 Win32 .dll 文件?

    是否可以通过 C NET 编写 Win32 dll 文件 如果是的话 我在哪里可以找到一些教程 如果不是 那么您对编写 Win32 DLL 有什么建议 Thanks 对的 这是可能的 事实上有一个工具可以做到这一点 它在 Rainmeter

随机推荐

  • ATT&CK实战系列-从web打点到内网渗透

    学习目标 搭建需求环境 windows7提供web服务双网卡可访问外网和内网主机 window2008 内网域控 windows7 内网主机 学习内容 例如 环境搭建 web打点 shell连接 使用蚁剑 内网渗透 一 环境搭建 攻击机 k
  • 服务器一直被ddos攻击怎么办

    一 分析一下ddos原因 是你的对手原因 还是你服务器原因 比如以前容易被ddos的服务器一般是私服 赌博站 钓鱼站等非法站也容易被ddos 二 有的说是ddos 有的技术人员没有分析出是cc还是真的ddos cc的一般是可以查到攻击ip的
  • 【算法实验项目】背包问题(c++)

    给定n个物品和一个容量为C的背包 物品i的重量是wi 其价值为vi 背包问题是如何选择装入背包的物品 使得装入背包中的物品总价值最大 物品可以分割 Input 单组数据输入 第一行 两个整数n和C 表示物品的个数和背包的容量 1 n 100
  • 【Redis】Redis使用和RedisTemplate的方法介绍

    目录 基本使用 RedisTemplate opsForList 的方法介绍 RedisTemplate opsForValue 的方法介绍 RedisTemplate opsForSet 的方法介绍 RedisTemplate opsFo
  • EasyExcel 对已有文件追加sheet页

    背景 用户上传了一个excel 在不动已有数据的情况下 进行追加sheet页和数据操作 默认情况下 write操作会把其他sheet页和数据清空掉 复制一份上传的excel进行重命名 FileUtils copyFile sourceFil
  • 大华web插件

    因为项目需要 需要把大华视频监控移至到网页端 在网上找了很多资料 最终找到下面链接的插件包 本人自己调试了一下 可以正常运行 而且包中附带有详细的二次开发资料 很方便 测试浏览器使用360安全浏览器 并且在兼容模式和极速模式下均可正常使用
  • 安卓计算器

    本项目采用Java语言 xml布局 Android studio开发 使用API34 项目一共两个页面 简单计算器和专业计算器 当然也不专业 该项目主要借鉴了小米计算器的键盘布局 简约风 其实是我太菜辣 特别提醒其中的百分号是取模运算 并不
  • 刷脸支付帮商户降低人力成本引流圈客

    被支付宝 微信量大巨头推上风口浪尖的黑科技刷脸支付 不但具备超高的投资潜力 同时也给用户带来了便捷的支付体验 给商家带来了诸多好处 包括提升收银效率 降低人力成本 引流圈客等 随着刷脸支付使用人数的增长 很多商户都开始尝试使用刷脸支付设备
  • 元宇宙的六大核心技术

    1 区块链技术 哈希算法及时间戳技术 数据传播及验证机制 共识机制 分布式存储 智能合约 分布式账本 2 交互技术 VR虚拟现实技术 AR增强现实技术 MR混合现实技术 全息影像技术 脑机交互技术 传感技术 体感 环境等 3 电子游戏技术
  • STC8学习-ADC2

    1 ADC第15通道内部电压的使用 首先是电压值的查询 这里需要通过指针获取内部电压值 unsigned int VDDA BGV 定义指针变量 BGV int idata 0xef 获取内部电压值 放在主函数前面执行一次就可以了 2 例程
  • APP是什么? 为什么叫APP APP全称是什么

    应用程序 Application的缩写 APP 应用程序 外语缩写 App 外语全称 Application APP狭义指智能手机的第三方应用程序 广义指所有客户端软件 现多指移动应用程序 app是什么意思 一 最常用的解决APP是什么意思
  • FLASHBACK TABLE ora-01031 权限不足

    FLASHBACK TABLE emp TO timestamp to timestamp 2013 04 08 16 10 59 yyyy mm dd hh24 mi ss 执行上边语句 一直在报权限不足 D flashback tabl
  • qt 等待线程结束_QT5线程关闭

    QT5线程关闭 QThread析构函数的说明 请注意 删除一个QThread对象不会停止它管理的线程的执行 删除正在运行的QThread 即isFinished 返回false 将导致程序崩溃 在删除QThread之前等待finished
  • QT5.12编译MQTT 5.13图文详细版

    看到很多小伙伴都在用mqtt 在此记录下 1 下载最新的MQTT源码 https github com emqx qmqtt git 2 使用Qt qcreator打开 qtmqtt qtmqtt pro工程文件 或者使用步骤9终极杀招只需
  • 零基础 SQL 数据库小白,从入门到精通的学习路线与书单

    一 学SQL的苦恼 我观察了 865 个 SQL 入门者 发现大家在学习 SQL 的时候 最大的问题不是 SQL 语法 而是对 SQL 原理的不熟悉 很多初学者 往往被 SQL 能做什么 为什么会有 SQL 这门语言给迷惑到了 他们用学英语
  • java 纯面向对象_Java是纯粹的面向对象语言吗?

    码农公社 210 net cn 210 1024 10月24日一个重要的节日 码农 程序员 节 纯面向对象语言支持或具有将程序内的所有内容视为对象的功能 不支持原始数据类型 如 int char float bool 等 什么是纯面向对象语
  • vue3中使用vue3-seamless-scroll(最新版本滚动插件)

    vue3中使用vue3 seamless scroll 最新版本滚动插件 Vue3 0 无缝滚动组件 支持Vite2 0 支持服务端打包 官方git地址 npm安装 npm install vue3 seamless scroll save
  • BERT,Transformer的模型架构与详解

    BERT Transformer的模型架构与详解 1 1 认识BERT 学习目标 了解什么是BERT 掌握BERT的架构 掌握BERT的预训练任务 什么是BERT BERT是2018年10月由Google AI研究院提出的一种预训练模型 B
  • 强制卸载symantec

    在网上找了一堆的文章 都没有解决我的问题 最后Google了一把 还是利用symantec自己出的工具 CleanWipe zip 把它卸载了 正所谓解铃还需系铃人啊 太无耻了 分割线 要下载一个工具CleanWipe zip来卸载 然后打
  • GDAL源码剖析(二)之编译说明

    转载自 http blog csdn net liminlu0314 article details 6937194 一 简单的编译 1 使用VisualStudio IDE编译 首先进入GDAL的源代码目录 可以看到有几个sln为后缀的文