AFSIM入门教程03.02:更新tiff库版本

系列索引:AFSIM入门教程索引

AFSIM入门教程03.01:Windows下编译中完成了Windows下编译,但是源码中有指定版本的依赖库。本着研究原则,更新其版本。

首先尝试将其修改为系统提供的依赖。但是这些依赖由CMakeList.txt管理,修改起来比较麻烦。所以只能手动编译源码。

除非你十分熟悉CMake和AFSIM,否则不要轻易修改代码结构,只能在现有结构和规则下微调。

官方依赖库

进入swdev/dependencies/3rd_party目录,可以看到官方提供的指定版本的依赖库。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
D:\AFSIM\TRUNK\SWDEV\DEPENDENCIES\3RD_PARTY
├─curl
├─freetype
├─gdal
├─geos
├─gsl
├─gtest
├─jpeg
├─libpng
├─osg
├─osgEarth
├─proj
├─protobuf
├─pybind11
├─qt
├─sdl
├─sqlite
├─tiff
├─tinyxml2
├─yasm
├─zlib
└─zmq

随便打开一个文件夹,查看内容。

1
2
3
4
5
6
7
    Directory: D:\AFSIM\trunk\swdev\dependencies\3rd_party\sqlite

Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 02/17/2022 10:50:31 PM 3202133 sqlite-3.32.3-x64-vs2015.tar.gz
-a--- 02/17/2022 10:50:31 PM 3278697 sqlite-3.32.3-x64-vs2017.tar.gz
-a--- 07/10/2025 10:06:10 PM 1553092 sqlite-3.50.2-x64-vs2017.tar.gz

官方提供的库基于VS2015/2017编译,64位,压缩包格式为tar.gz,版本应该是当时常用的版本,当时现在已经过时了。

双击打开压缩包,查看内容,基本结构如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
├─debug
│ ├─bin
│ └─lib
│ ├─cmake
│ │ └─CURL
│ └─pkgconfig
├─include
│ └─curl
├─license
└─release
├─bin
└─lib
├─cmake
│ └─CURL
└─pkgconfig

依赖库使用

打开源码目录,搜索# Configure the 3rd_party,可以看到调用第三方库的代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# *****************************************************************************
# Configure the 3rd_party libraries

set(SWDEV_GDAL_PACKAGE "gdal-3.3.2" CACHE STRING "" FORCE)
set(SWDEV_GEOS_PACKAGE "geos-3.5.1" CACHE STRING "" FORCE)
set(SWDEV_QT_PACKAGE "qt-5.12.11" CACHE STRING "" FORCE)
set(SWDEV_OSG_EARTH_PACKAGE "osgEarth-2.10.1" CACHE STRING "" FORCE)
set(SWDEV_OSG_PACKAGE "osg-3.6.3" CACHE STRING "" FORCE)
set(SWDEV_TIFF_PACKAGE "tiff-4.3.0" CACHE STRING "" FORCE)
set(SWDEV_SDL_PACKAGE "sdl-2.0.16" CACHE STRING "" FORCE)
set(SWDEV_PROJ_PACKAGE "proj-8.1.1" CACHE STRING "" FORCE)

mark_as_advanced(FORCE SWDEV_GDAL_PACKAGE)
mark_as_advanced(FORCE SWDEV_GEOS_PACKAGE)
mark_as_advanced(FORCE SWDEV_SDL_PACKAGE)
mark_as_advanced(FORCE SWDEV_QT_PACKAGE)
mark_as_advanced(FORCE SWDEV_OSG_EARTH_PACKAGE)
mark_as_advanced(FORCE SWDEV_OSG_PACKAGE)
mark_as_advanced(FORCE SWDEV_TIFF_PACKAGE)
mark_as_advanced(FORCE SWDEV_PROJ_PACKAGE)

可以发现,官方提供不少依赖库,但是并没有完全使用。

tiff

以tiff库作为示例,更新官方依赖库版本。并以此为基准更新其他库。

编译

下载tiff4.7.0源码,解压、编译Release/Debug库。

结构

按照压缩包的结构,压缩打包编译的库tiff-4.7.0-x64-vs2022.tar.gz,对于没有的库就直接忽略。

将打包的库放置于swdev/dependencies/3rd_party/tiff目录下。

文件修改

mystic/exec/source/CMakeLists.txt修改tiff版本。

tools/3rd_party-cmake/tiff-4.3.0.cmake修改文件名中的tiff版本。

warlock/warlock_exec/source/CMakeLists.txt修改tiff版本。

wizard/CMakeLists.txt修改tiff版本。

编译AFSIM

配置CMake工程

1
cmake -B .\build

提示错误

1
2
3
4
5
6
7
8
9
10
-- Calculating SHA512 hash for: D:/AFSIM/trunk/swdev/dependencies/3rd_party/qt/qt-5.12.11-x64-vs2017.tar.gz
-- Calculating SHA512 hash for: D:/AFSIM/trunk/swdev/dependencies/3rd_party/gdal/gdal-3.3.2-x64-vs2017.tar.gz
-- Calculating SHA512 hash for: D:/AFSIM/trunk/swdev/dependencies/3rd_party/geos/geos-3.5.1-x64-vs2017.tar.gz
-- Calculating SHA512 hash for: D:/AFSIM/trunk/swdev/dependencies/3rd_party/osgEarth/osgEarth-2.10.1-x64-vs2017.tar.gz
-- Calculating SHA512 hash for: D:/AFSIM/trunk/swdev/dependencies/3rd_party/osg/osg-3.6.3-x64-vs2017.tar.gz
-- Calculating SHA512 hash for: D:/AFSIM/trunk/swdev/dependencies/3rd_party/proj/proj-8.1.1-x64-vs2017.tar.gz
CMake Warning at tools/3rd_party-cmake/config.cmake:146 (message):
Cannot locate package tiff-4.7.0
Call Stack (most recent call first):
mystic/exec/source/CMakeLists.txt:51 (swdev_acquire_packages)

可以看到其他库支持计算sha512值,tiff-4.7.0库没有找到。

怀疑和文件名中的vs2022有关。搜索代码关键词,找到以下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if(MSVC)
# https://cmake.org/cmake/help/latest/variable/MSVC_VERSION.html
if(MSVC_VERSION GREATER 1900)
set(SWDEV_SYS_SUFFIX vs2017)
elseif(MSVC_VERSION EQUAL 1900)
set(SWDEV_SYS_SUFFIX vs2015)
elseif(MSVC_VERSION EQUAL 1800)
set(SWDEV_SYS_SUFFIX vs2013)
elseif(MSVC_VERSION EQUAL 1700)
set(SWDEV_SYS_SUFFIX vs2012)
elseif(MSVC_VERSION EQUAL 1600)
set(SWDEV_SYS_SUFFIX vs2010)
else()
message(WARNING "${MSVC_VERSION} not recognized for 3rd party packages.")
endif()
else(MSVC)
set(SWDEV_SYS_SUFFIX ln4)
endif(MSVC)

官方默认最高使用VS2017。

所以这里有两种解决方法:

  • 一次性更新所有依赖库为VS2022,并修改默认字符串。
  • 修改文件名。

这里只是测试,就只修改文件名。

然后编译流程可以直接走完。

至此,tiff库更新成功。接下来更新其他库。


AFSIM入门教程03.02:更新tiff库版本
https://blog.jackeylea.com/afsim/how-to-update-tiff-version-in-afsim/
作者
JackeyLea
发布于
2025年7月14日
许可协议