Yjc 发表于 2023-12-26 00:51:16

求助各位老师解答Fortran可执行文件库依赖性相关问题

各位老师好,我是从事理论计算方面的学生。最近我在学习一个数值计算方面的Fortran程序时,有一个疑问一直困扰着我,恳请各位老师解答:

这个程序的主要内容是求解矩阵的本征值和本征矢,其中调用了MKL数学库中的DGEEV子程序,源代码附在下面;而作者给出的程序包中却只有exe可执行文件以及一个OpenMP并行相关的dll动态链接库。我的疑问是,既然这个程序中调用了MKL库中的一个函数,那么这个库应该以dll动态链接库的形式与程序包一起发布,但作者的程序包中没有这个库,但exe可执行文件仍然可以正常运行,这让我很想不通,恳请各位老师指点,谢谢!









fcode 发表于 2023-12-26 08:21:44

他用的静态链接。/MT
MKL的静态库代码被链接到exe里面了。
详解:http://dlllose.w.fcode.cn/

Yjc 发表于 2023-12-26 13:28:11

本帖最后由 Yjc 于 2023-12-26 13:31 编辑

fcode 发表于 2023-12-26 08:21
他用的静态链接。/MT
MKL的静态库代码被链接到exe里面了。
详解:http://dlllose.w.fcode.cn/

谢谢老师解惑;

想请老师判断下我的这个理解对不对,其实MKL数学库中的子程序就是lib库,在具体使用过程中,需要先将主程序编译成.o文件,再将这个主程序文件与所需要的lib静态库链接,就可以生成.exe可执行文件了呢?

这篇博文中调用MKL数学库的方法是不是就是运用了静态链接呢?https://blog.csdn.net/crazyhacking/article/details/7104309

谢谢老师解答!

fcode 发表于 2023-12-26 15:38:45

Yjc 发表于 2023-12-26 13:28
谢谢老师解惑;

想请老师判断下我的这个理解对不对,其实MKL数学库中的子程序就是lib库,在具体使用过程 ...

MKL中的子程序,是 Intel 编写的。不开源,所以你无法获得源代码。
Intel 提供了2种编译版本:

一种是DLL形式的,并提供导入库。
如果你链接这种导入库,编译产生的exe,就会依赖MKL的dll文件。

另一种是静态库形式的。
如果你链接这种静态库,编译产生的exe,就不会依赖MKL的dll文件。(但似乎不能取消对 OpenMP DLL 的依赖)

通常来说,/MD 链接方式会选择前者,而 /MT 链接方式会选择后者。

博文中看不出用的哪种,默认情况应该是用的前者。
这一问题,也不太影响对博文的理解。

Yjc 发表于 2023-12-26 18:01:26

本帖最后由 Yjc 于 2023-12-26 18:03 编辑

嗯嗯,我基本理解了,可以直接链接MKL中的静态库来编译产生不依赖于dll的exe可执行程序,链接的方式只需要将主程序和这个静态库一起编译成exe文件就可以了,感谢老师的解答!
您说的不能解除对OpenMP的依赖,我看开发者提供的程序包里面确实有libiomp5md.dll这个动态链接库,应该和您说的是一样的




Yjc 发表于 2023-12-26 21:24:24

fcode 发表于 2023-12-26 15:38
MKL中的子程序,是 Intel 编写的。不开源,所以你无法获得源代码。
Intel 提供了2种编译版本:



老师,我还有个问题想请教您,这个程序的可执行文件在运行时界面会显示一个控制台,允许用户向其中拖拽矩阵文件进行处理,并将本征值和本征矢写入新的文件中;

感觉这部分功能在源代码里没有体现诶,作者应该还有另外一部分实现这个控制台界面的代码,这种功能一般是怎么实现的呢?

非常感谢老师解答!

fcode 发表于 2023-12-27 08:43:21

拖拽功能是windows实现的。操作系统(windows/linux)实现了标准输入输出通道。
Fortran 的 Read 语句,在不特殊指定通道的情况下,会从标准输入通道获取输入内容。而 write 语句,会在标准输出通道输出内容。

在 windows 上,你把一个文件拖拽到命令行窗口,windows就会自动把这个文件的文件名输入到标准输入通道。

Yjc 发表于 2023-12-27 11:02:11

fcode 发表于 2023-12-27 08:43
拖拽功能是windows实现的。操作系统(windows/linux)实现了标准输入输出通道。
Fortran 的 Read 语句,在 ...

这里面的逻辑我大概理顺了,刚开始学编译型语言,很多概念都不太清楚;

谢谢老师解答!
页: [1]
查看完整版本: 求助各位老师解答Fortran可执行文件库依赖性相关问题