从零开始:在Windows环境下编译6SV1.1/6SV2.1的完整指南
1. 环境准备为什么要在Windows上折腾我知道很多朋友一看到“编译”两个字头就大了尤其是在Windows系统上。大家平时用软件不都是直接下载个安装包点几下“下一步”就完事了吗没错但对于6S模型这种由科研机构用Fortran语言编写的专业辐射传输工具情况就有点特殊了。它不像我们常用的办公软件官方并没有提供一个现成的、双击就能运行的Windows版“sixs.exe”。原因很简单这类科学计算模型历史悠久最初都是在Unix/Linux环境下开发和运行的其构建方式比如Makefile天然更适配那个环境。所以我们的目标很明确在Windows系统里模拟出一个Linux环境然后在这个“模拟器”里把6S的源代码“翻译”编译成Windows能认识的可执行文件.exe。听起来有点绕但你可以把它想象成我们要在电脑上玩一个只有日文版的游戏最直接的办法不是等官方出中文版而是自己装一个翻译工具模拟环境然后边玩边实时翻译编译执行。为什么非要自己编译呢直接找别人编译好的不行吗当然可以如果你能找到完全匹配你系统环境的版本。但问题在于别人编译好的程序可能依赖特定的运行库或者编译器版本直接拿过来很可能运行不了报各种“找不到dll”的错误。自己编译出来的才是最适合自己电脑的“定制版”运行起来最稳。而且对于想深入研究、甚至修改6S源代码的朋友来说掌握编译是第一步也是必经之路。别担心这个过程虽然步骤不少但我会把每一步都掰开揉碎了讲保证你只要跟着做就一定能成功。咱们用到的核心工具是Cygwin64 Terminal它就像一个“魔法外壳”让你在Windows里能使用绝大多数Linux命令和工具包括我们编译Fortran代码必需的gfortran编译器。2. 搭建你的Windows“Linux工作站”Cygwin64安装详解工欲善其事必先利其器。第一步我们要把Cygwin64这个“魔法外壳”装好。别被它的名字吓到安装过程跟装普通软件差不多主要是选择安装组件时需要留意。2.1 下载与初始安装首先去Cygwin的官网直接搜索“Cygwin”即可找到下载安装程序setup-x86_64.exe。运行后会看到几个选项Install from Internet从网络安装推荐。Root Directory这是Cygwin的安装目录相当于你Linux系统的“根目录”。我习惯放在D:\Cygwin64你可以选一个空间充足的盘符路径不要包含中文和空格避免后续出现诡异问题。Local Package Directory这是下载的安装包缓存目录可以放在任何地方。点击下一步选择连接方式一般直接选“Direct Connection”就行。接下来是关键的一步选择镜像站点。为了下载速度快建议选择一个国内的镜像比如阿里云、网易、清华的镜像源。列表里如果没有可以手动输入镜像地址这一步能大幅提升后续组件的下载速度。2.2 核心组件选择别漏了gfortran接下来是选择安装包这是整个安装的核心也是容易踩坑的地方。默认视图是“Category”分类视图对于新手不太友好。我强烈建议你点击左上角的“View”按钮切换到“Full”视图这样所有可安装的包都会按字母顺序列出来找起来一目了然。我们需要安装以下这些包请务必在搜索框里找到它们并点击“Skip”列将其标记为安装版本比如最新版本。记住不是只勾选一个而是要把相关的运行时库devel版本也装上。gcc-gfortran这是我们的主角Fortran语言的编译器。没有它一切免谈。在“Full”视图下搜索“gfortran”你会看到gcc-gfortran这个包点击“Skip”列选择一个版本号如最新的x.x.x进行安装。make编译过程的“总指挥”。它负责读取我们后面要修改的Makefile文件并调用gfortran等工具按步骤编译。搜索“make”并安装。gcc-core和gcc-gC和C的核心编译器。虽然6S是Fortran写的但整个GCCGNU编译器集合工具链是一个整体安装gfortran有时会自动依赖它们但手动检查装上更保险。vim或nanoLinux下的文本编辑器。我们需要用它来修改Makefile文件。vim功能强大但上手稍难nano则非常简单直观。我建议新手安装nano在搜索框里找到它装上就行。wget或curl命令行下载工具。方便我们以后在终端里直接下载文件。可以先装上备用。选择完所有需要的包后点击下一步安装程序就会开始下载和安装。这个过程取决于网速和选择的包数量可能需要十几到几十分钟。泡杯茶耐心等待即可。安装完成后你的桌面上会出现一个“Cygwin64 Terminal”的图标。双击打开它你会看到一个黑色的命令行窗口提示符可能是你的用户名你的电脑名 ~。试着输入gfortran --version并回车如果能看到gfortran的版本信息比如“GNU Fortran (GCC) x.x.x”那么恭喜你最基础的环境已经搭建成功了3. 获取6S源代码与关键修改环境准备好了现在要把“原材料”——6S的源代码——搬进来并做一些关键的适配修改。3.1 下载与解压根据你的需求选择下载6SV1.1或6SV2.1。正如原始文章提到的如果你未来打算使用Py6S这个强大的Python接口库那么必须选择6SV1.1版本因为Py6S目前只支持1.1版本。这是一个重要的选择点。6SV2.1官方地址可以在马里兰大学的6S页面找到。6SV1.1下载一个可靠的来源是Py6S的官方文档页面里面通常提供了源码链接。下载下来通常是一个压缩包如.tar.gz或.zip。我建议你在Windows下直接解压放到一个你容易找到的目录。比如我在D盘根目录下新建一个Projects文件夹然后把解压后的6SV1.1文件夹放进去完整路径像这样D:\Projects\6SV1.1。再次强调路径里不要有中文和空格。3.2 解剖与修改Makefile让编译指令“说人话”这是编译成功与否最最关键的一步。Makefile文件相当于一个“自动化编译食谱”告诉make工具如何一步步把源代码变成可执行文件。但这份“食谱”是针对古老Linux环境的我们需要根据Windows下的Cygwin环境进行“调味”。用你熟悉的Windows文本编辑器如记事本、Notepad、VSCode打开6SV1.1文件夹里的Makefile文件。你会看到很多行以各种符号开头的指令。别怕我们只需要动其中两处。第一处修改更换“主厨”编译器找到类似这样的一行通常在文件靠前的位置FC g77 $(FFLAGS)这行意思是FCFortran Compiler变量定义为使用g77编译器并加上FFLAGS这些参数。g77是一个非常古老的Fortran 77编译器我们现在安装的是更现代、功能更强的gfortran。所以我们需要把这行改成FC gfortran -stdlegacy -ffixed-line-length-none -ffpe-summarynone $(FFLAGS)我来解释一下新增的几个参数是干嘛的-stdlegacy告诉编译器代码里可能用了比较老的Fortran语法比如6S这种老程序请按兼容模式处理别报错。-ffixed-line-length-none老式Fortran代码对每行的长度有严格限制比如72列这个选项解除这个限制避免编译时因为代码行太长而出错。-ffpe-summarynone这个选项是关于浮点异常处理的设置为none可以让编译过程更安静避免一些无关紧要的警告干扰。第二处修改给“菜品”起个正确的名字输出文件继续往下翻找到生成最终可执行文件的那一行。它可能长这样sixsV1.1: $(OBJ) $(FC) -o sixsV1.1 $(OBJ) -lm我们需要做两件事删掉末尾的-lm。这个参数是告诉编译器链接数学库libm但在Cygwin/gfortran环境下有时会自动链接加上反而可能导致链接错误。直接删掉最安全。给输出的可执行文件加上.exe后缀这样在Windows里才能被识别。所以把-o sixsV1.1改为-o sixsV1.1.exe。修改后这一行应该看起来像这样sixsV1.1.exe: $(OBJ) $(FC) -o sixsV1.1.exe $(OBJ)保存并关闭Makefile。对于6SV2.1修改逻辑是完全一样的找到对应的行进行同样的操作即可。这两处修改本质上就是让编译指令适应我们当前的环境和需求是成功编译的“临门一脚”。4. 启动编译见证.exe文件的诞生激动人心的编译环节来了整个过程就像在厨房按照食谱做菜我们只需要输入几个简单的命令。4.1 进入“厨房”源代码目录首先打开你的 Cygwin64 Terminal。我们需要导航到存放6S源代码的目录。由于Cygwin看到的文件系统和Windows不同它用/cygdrive/盘符/的方式来访问Windows的盘符。假设你的6SV1.1源代码放在D:\Projects\6SV1.1那么在Cygwin终端里你需要输入cd /cygdrive/d/Projects/6SV1.1然后按回车。cd是“change directory”的缩写即切换目录。执行成功后命令行提示符的当前路径应该会变成你刚输入的路径。你可以输入pwd打印工作目录命令来确认或者输入ls列出文件看看是不是能看到Makefile,main.f等源代码文件。4.2 执行“烹饪”命令make现在只需要输入一个命令make然后回车。make这个命令会自动寻找当前目录下的Makefile文件并按照里面定义好的规则开始编译。屏幕上会开始飞速滚动各种信息主要是gfortran编译器在编译每一个Fortran源文件.f文件时的输出。你会看到很多以.f结尾的文件名被处理。这个过程通常很快十几秒到一分钟就结束了。如果一切顺利最后几行通常不会有明显的错误error信息可能会停在类似make: Nothing to be done for all.或者直接回到命令提示符。这时你再用ls命令查看当前目录应该会惊喜地发现多出了一个名为sixsV1.1.exe或你修改后的名字的文件。如果出现错误别慌。最常见的错误是make: *** No rule to make target xxx. Stop.这通常意味着Makefile里指定的某个源文件找不到请检查你的源代码包是否完整解压。另一种常见错误是编译器报语法错误这很可能是因为Makefile的第一处修改编译器参数没做对请回头仔细检查是否严格按照要求修改并保存了。5. 功能验证让你的6S模型跑起来编译出.exe文件只是第一步我们得验证它是不是个“活”的能不能正确计算。6S源码包里通常自带一些测试用例我们就用它们来验货。5.1 基础命令行测试在Cygwin终端里确保你还在sixsV1.1.exe所在的目录。输入以下命令./sixsV1.1.exe ./Examples/Example_In_1.txt我来拆解一下这个命令./sixsV1.1.exe./表示当前目录后面跟着我们要运行的程序名。这是一个输入重定向符号。它把后面跟着的文件内容作为标准输入“喂给”前面的程序。6S程序默认是从键盘标准输入读取配置参数的我们用这个符号让它从一个文本文件里读方便自动化测试。./Examples/Example_In_1.txt这是程序自带的测试输入文件路径。回车后程序会运行并在终端里输出一大段结果。你会看到各种大气参数、反射率、辐射亮度等计算结果。只要程序没有崩溃并输出了看起来像数字的结果基本就说明编译是成功的程序能跑。一个更直观的技巧是你可以直接把sixsV1.1.exe文件从Windows资源管理器拖拽到Cygwin终端窗口它会自动填入文件的完整路径然后你手动输入再把Example_In_1.txt文件也拖拽进来最后回车。这对于路径复杂或懒得打字的情况非常方便。5.2 进阶验证与Py6S联动可选但推荐如果你编译的是6SV1.1并且对Python有点兴趣我强烈建议你安装Py6S进行验证。这不仅能证明你的6S可执行文件工作正常还为你未来用Python批量、自动化调用6S模型打开了大门。安装Py6S非常简单在Windows的命令提示符CMD或PowerShell里不是在Cygwin终端里输入pip install Py6S前提是你的系统已经安装了Python和pip。安装完成后我们需要告诉Py6S我们自己的sixsV1.1.exe在哪里。有两种方法临时指定在Python脚本里创建SixS对象时指定路径。from Py6S import * s SixS(D:/Projects/6SV1.1/sixsV1.1.exe) # 注意这里用正斜杠一劳永逸推荐将sixsV1.1.exe所在的目录例如D:\Projects\6SV1.1添加到系统的环境变量PATH中。这样Py6S会自动在PATH里寻找可执行文件。设置好后在Python里运行一个简单的测试from Py6S import * SixS.test()如果输出显示“Results agree, Py6S is working correctly”并且指出了你编译的exe路径那就说明从编译到环境配置整个链条都完美打通了你还可以尝试运行Py6S文档里的一些例子比如计算特定波长下的像素反射率这能让你更直观地感受到6S模型的强大和Py6S封装的便捷。6. 避坑指南与常见问题排查这条路我走过不止一遍踩过的坑希望能帮你填平。下面是一些你可能会遇到的问题和解决办法。问题1make命令找不到或者执行后报错make: command not found原因安装Cygwin时漏装了make包。解决重新运行Cygwin的安装程序setup-x86_64.exe。在选择包时搜索“make”确保其状态是某个版本号不是“Skip”。然后继续安装过程它会为你补充安装。问题2编译过程中报错提示gfortran: command not found或Fatal Error: Can‘t open module file ‘...‘ for reading原因根本原因是gfortran编译器没装好或者Makefile第一处修改有误导致编译器调用失败或参数不对。解决在Cygwin终端里输入which gfortran看是否能返回gfortran的路径。如果没返回说明确实没安装成功需重新安装gcc-gfortran包。仔细核对Makefile的第一处修改确保拼写正确特别是-stdlegacy等参数前的短横线是一个不是两个。问题3编译成功生成了.exe文件但运行时一闪而过或者提示“找不到libgfortran-3.dll”之类的错误原因程序运行时需要依赖一些动态链接库DLL这些库在Cygwin的bin目录里。你的系统PATH环境变量可能没有包含这个目录。解决方法A推荐将Cygwin的bin目录例如D:\Cygwin64\bin添加到系统的环境变量PATH中。这样在任何地方运行这个exe系统都能找到依赖库。方法B在Cygwin终端内部运行这个exe。因为Cygwin终端启动时会自动设置好库路径。问题4使用重定向输入文件时提示“No such file or directory”原因输入文件的路径写错了。在Cygwin里路径分隔符是正斜杠/并且它是区分大小写的。解决使用pwd命令确认当前目录使用ls命令仔细查看Examples文件夹下的文件名是否正确。可以尝试使用Tab键自动补全文件名避免手动输入错误。问题5为Py6S指定exe路径时在Windows下应该用正斜杠还是反斜杠建议在Python字符串中统一使用正斜杠/或者使用双反斜杠\\作为路径分隔符。单反斜杠\在Python字符串里是转义字符会引发错误。例如‘D:/Projects/6SV1.1/sixsV1.1.exe‘或r‘D:\Projects\6SV1.1\sixsV1.1.exe‘字符串前的r表示原始字符串不转义。记住编译过程出错时仔细阅读终端里报错信息的前几行它通常直接指出了问题所在是文件名错误、语法错误还是找不到命令。解决了这几个常见问题99%的障碍都能扫清。7. 从编译到应用下一步可以做什么成功编译并验证了6S可执行文件你的旅程才刚刚开始。这个sixsV1.1.exe或sixsV2.1.exe是一个强大的命令行工具但它本身只是一个“计算引擎”。如何高效地利用它才是发挥价值的关键。批量处理与自动化6S模型通常需要处理成千上万次模拟每次模拟对应不同的气溶胶类型、太阳角度、观测几何等参数。手动修改输入文件再运行exe是不现实的。这时你可以用任何你熟悉的脚本语言Python、MATLAB、甚至Shell脚本来自动化这个过程。用脚本生成不同的输入参数文件然后循环调用./sixsV1.1.exe input_i.txt最后再写脚本解析所有的输出结果文件。这就是科研和工程中的标准做法。集成到你的工作流中如果你主要用Python做数据分析那么Py6S是你的绝佳搭档。你已经完成了最底层的一步——提供了Py6S所需的本地6S引擎。接下来你可以深入学习Py6S的API用它来设置复杂场景、进行光谱响应函数卷积、运行敏感性分析等等。Py6S的官方文档和示例代码是很好的学习资源。理解与定制对于想更深入的朋友拥有了源代码和编译能力就意味着你有了“透视”和“改造”它的可能。你可以阅读那些.f源文件虽然Fortran代码读起来需要适应了解大气辐射传输的各个模块是如何实现的。你甚至可以尝试修改某些参数化方案或者添加自己的输出项然后重新编译打造一个属于你自己的“定制版”6S。当然这需要相当的Fortran和大气科学背景知识。我自己的经验是第一次成功编译时的成就感最大但真正的工作价值是在后续的自动化脚本编写和结果分析中体现的。把这个编译好的exe文件看作是一把精准的“物理定律尺子”而你的脚本是灵活操纵这把尺子的“手”。尺子造好了接下来就看你的手能画出多精彩的图了。希望这份详细的指南能帮你顺利造好这把尺子扫清在Windows上探索大气遥感世界的第一道技术障碍。如果在实际操作中遇到任何本指南未覆盖的奇怪问题不妨回头检查一下路径、环境变量和修改的细节很多时候成功就藏在那些看似不起眼的标点符号里。