Fortran Coder

标题: 如何同时连接for和obj文件 [打印本页]

作者: sunkingf    时间: 2016-7-21 11:16
标题: 如何同时连接for和obj文件
各位好,

主程序可以同时连接for和obj文件吗? 比如:

include  a.for
连接   b.obj

上面是个想法,但怎么实现呢?

作者: vvt    时间: 2016-7-21 15:36
本帖最后由 vvt 于 2016-7-21 15:37 编辑

include 属于预处理语句,并不是链接,而是简单的复制粘贴。
链接 b.obj 属于链接时候的操作。一般这部分操作要么用户自己进行,要么写入 makefile 文件让 make 执行。而不通过源代码来完成。

请理解 预处理,编译,链接。这三个阶段。
所以正确的姿势是:

a.f90 文件 include inc.f90 文件
编译 a.f90 文件,得到 a.obj 文件
链接 a.obj 文件和 b.obj 文件,得到可执行文件

作者: vvt    时间: 2016-7-21 15:41
ivf 支持一个扩展的写法,用于在源代码中告知编译器会使用到另一个 obj 文件或 lib 文件
比如
!dec$objcomment lib:'b.obj'
但是这不是标准语法,只适合与 ivf 编译器,且必须使用微软的连接器才支持。
作者: sunkingf    时间: 2016-7-21 16:48
我用的就是intel Visual Fortran 2013集成在VS2010中的,那么可以将main.for写成

!dec$objcomment lib:'b.obj'
include 'a.for'

然后编译得到main.obj文件,使得原来的b.obj和a.for和a.for 都起作用吗?


作者: sunkingf    时间: 2016-7-21 20:03
vvt 发表于 2016-7-21 15:41
ivf 支持一个扩展的写法,用于在源代码中告知编译器会使用到另一个 obj 文件或 lib 文件
比如
!dec$objcomm ...

我刚刚试了 用一个main程序调用一个lib文件,是可以的; 但是调用obj文件没有成功,无法连接。。。。
作者: vvt    时间: 2016-7-21 20:19
那就没办法了,老老实实的把 b.obj 添加在工程里或者linker,input里吧。
作者: sunkingf    时间: 2016-7-21 20:49
vvt 发表于 2016-7-21 20:19
那就没办法了,老老实实的把 b.obj 添加在工程里或者linker,input里吧。

把obj放在linker, input 中可以。 只是我的目的不仅于此,是想在有限元软件ABAQUS中调用二个子程序,一个用for形式,一个用编译好的形式(以保护代码)。可惜ABAQUS 和 fortran都精通的人不多。。。。

谢谢啦!
作者: fcode    时间: 2016-7-21 21:15
试试动态链接库?用 LoadLibrary 和 GetProcAddress 调用(隐式调用)
作者: hfx07    时间: 2020-5-28 17:14
楼主解决了ABAQUS调用两个子程序(一个for文件,一个obj文件)的方法吗?我现在也在考虑这个
作者: necrohan    时间: 2020-5-29 16:46
hfx07 发表于 2020-5-28 17:14
楼主解决了ABAQUS调用两个子程序(一个for文件,一个obj文件)的方法吗?我现在也在考虑这个 ...

一个项目中可以同时有obj和for文件,楼上已经说过了,flow3d就是这么弄的,自带了obj,开放了一部分源代码可以修改




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2