Windows上编译xtb6.3.1版本

简单的介绍如何构建Windows版本的xtb程序

由于xtb添加了cmake构建方式的支持,对gcc编译器和ifort的支持,使得在Windows上构建成为可能。

xtb版本的选择

Cygwin能够成功编译并通过所有测试的只有版本大于6.3.0VS+ifort方式对含有cmake文件的版本都有效,只不过更改的地方不同。

编译器选择

目前在Windows上支持编译的方式有两种,第一种VS+ifort,第二种Cygwin但是值得注意的是采用ifort编译的时候不能指定Release版本,否则无法通过测试;也不能够使用VS自带的编译工具链,只能采用NMake MakefilesNinja,或者Meson也可以,不过麻烦。可以成功编译了,见文末。

推荐组合

基于以上原因,我推荐的编译方式是CygwinVS+ifort编译原生的Windows版本,xtb版本最好为6.3.0及其以后。

  • 注意点:
    1、需要lapackblas库,可以直接通过Cygwin仓库选择安装即可
    2、因为在Windows上可能无法通过ulimt -s unlimited解除堆栈空间限制,因此cmake的时候最好添加/STACK:9999999999

版本发布

只需要打包相关的dll即可发布。

补充(2020.6.12)

因为又发布了6.3.1新版本,在这里我分享一下我编译的xtb的Windows版本。
下载链接

补充(2020.07.10)

当使用--gfn 0选项时总是需要将param_gfn0-xtb.txt这个文件复制到工作目录才可以运行,这是源码有问题,没有将这部分参数编译到程序中去。因此可以自己更改一点东西。
更改/src/main/setup.f90文件中的判断文件存在部分代码即可,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
!省略
logical :: alive

if (present(fname)) then
if(index(fname, 'param_gfn0-xtb.txt') .ne. 0) then
inquire(file=fname, exist=alive)
if(alive) then
filename = fname
else
filename = env%xtbpath//'/param_gfn0-xtb.txt'
end if
else
filename = fname
end if
else
!省略

然后编译完成后,直接通过Windows环境变量XTBPATH指定到力场所在文件全路径即可,比如:

1
E:\User-software\xtb6.3.2_win64\share\xtb

这样就可以避免复制param_gfn0-xtb.txt的麻烦。

补充(2020.08.04)

含有cmake文件的版本都可以通过VS+Ifort进行编译,不过需要改下相关文件。下面以6.3.2版本为例:
src\mctc\mctc_init.f90相应部分改动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
!省略
! signal processing
external :: warning_sigint
external :: warning_sigterm
call signal(2,warning_sigint)
!call signal(15,warning_sigterm)
!省略
!...
!省略
subroutine warning_sigint
print *
print *, 'recieved SIGINT, terminating...'
print *, 'external termination of xtb'
call exit(666)
end subroutine warning_sigint

subroutine warning_sigterm
print *
print *, 'recieved SIGTERM, terminating...'
print *, 'external termination of xtb'
call exit(666)
end subroutine warning_sigterm
!省略

其实直接注释掉这两个call signal也可以,程序运行过程中通过CTRL+C打断以后的信号处理方式不同而已。
cmake文件相应增加栈尺寸,避免程序栈溢出报错

1
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /STACK:9999999999")

还应该显式的更改一下编译器默认精度,加上-4R8

编译好的原生版本下载链接如下,CPU可达到满载状态,性能比cygwin版本提升
下载链接
提取码:idzh

文章目录
  1. 1. xtb版本的选择
  2. 2. 编译器选择
  3. 3. 推荐组合
  4. 4. 版本发布
  5. 5. 补充(2020.6.12)
  6. 6. 补充(2020.07.10)
  7. 7. 补充(2020.08.04)
_
本站总访问量