Fortran Coder

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

查看数: 623 | 评论数: 7 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
Yjc
发布时间: 2023-12-26 00:51

正文摘要:

各位老师好,我是从事理论计算方面的学生。最近我在学习一个数值计算方面的Fortran程序时,有一个疑问一直困扰着我,恳请各位老师解答: 这个程序的主要内容是求解矩阵的本征值和本征矢,其中调用了MKL数学库中的DG ...

回复

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

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

谢谢老师解答!
fcode 发表于 2023-12-27 08:43:21
拖拽功能是windows实现的。操作系统(windows/linux)实现了标准输入输出通道。
Fortran 的 Read 语句,在不特殊指定通道的情况下,会从标准输入通道获取输入内容。而 write 语句,会在标准输出通道输出内容。

在 windows 上,你把一个文件拖拽到命令行窗口,windows就会自动把这个文件的文件名输入到标准输入通道。
Yjc 发表于 2023-12-26 18:01:26
本帖最后由 Yjc 于 2023-12-26 18:03 编辑

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




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 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 08:21:44
他用的静态链接。/MT
MKL的静态库代码被链接到exe里面了。
详解:http://dlllose.w.fcode.cn/

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-18 03:47

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表