使用 cmake 构建 Fortran 共享库时的奇怪问题

strange problem in building Fortran shared library with cmake

我正在尝试从以下 Fortran 代码 (util.f90) 构建一个简单的示例共享库(使用 cmake):

module util
    implicit none
       

    type dummy
        integer             :: n
        real, allocatable   :: buff(:)
    end type


    contains


        subroutine allocate_dummy(x, n)
            implicit none
            type(dummy), intent(out)    :: x
            integer, intent(in)         :: n
            x%n = n
            allocate(x%buff(n))
        end subroutine 


        subroutine print_dummy(x)
            implicit none
            type(dummy)     :: x
            integer         :: i
            if (allocated(x%buff)) then
                write(*, *) x%n, x%buff, 'Sum:', sum(x%buff)
            else
                write(*, *) 'not allocated'
            end if
        end subroutine 
    
end module 

其中示例主程序(main.f90)是

program main
    use util
    implicit none
    type(dummy) :: x

    call allocate_dummy(x, 3)
    x%buff = 3.14
    call print_dummy(x)

end program 

因此库只是分配 x 并打印出来。 我使用以下 CMakeLists.txt 构建库和可执行文件

cmake_minimum_required(VERSION 3.10)

project(DUMMY)
enable_language(Fortran)

add_library(dumlib SHARED util.f90)
target_include_directories(dumlib INTERFACE ${CMAKE_CURRENT_BINARY_DIR})

add_executable(a.out main.f90)
target_link_libraries(a.out dumlib)

但是 ./a.out 打印出

           3 Sum:   9.42000008    

应该在哪里打印

           3   3.14000010       3.14000010       3.14000010     Sum:   9.42000008    

直接编译(没有共享库),或者如果我手动构建库(没有 cmake),行为正确。但是使用 cmake 共享库, x%buff 不会被打印出来。由于 Sum: 已正确计算和打印,因此代码可以正常工作。 我想知道可能是什么问题?

编辑:

如果(在 write 语句中)我使用 (x%buff(j), j=1, n) 而不是 x%buff,则问题已解决。但是,我仍然很好奇这种行为的原因。

编辑 2:

我的 Fortran 编译器是 gfortran(gcc 版本 9.3.0)。

经过一些检查,我认为这是由于 运行时间库不匹配造成的。为了编译代码,我使用了本地安装的 gfortran,但在 运行 期间,我认为 ld 从安装到 CONDA 环境的 gcc 中获取了一些库。