Fortran Coder

查看: 12926|回复: 9
打印 上一主题 下一主题

[编译器] 如何同时连接for和obj文件

[复制链接]

27

帖子

7

主题

0

精华

熟手

F 币
124 元
贡献
66 点
跳转到指定楼层
楼主
发表于 2016-7-21 11:16:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位好,

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

include  a.for
连接   b.obj

上面是个想法,但怎么实现呢?
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
沙发
发表于 2016-7-21 15:36:34 | 只看该作者
本帖最后由 vvt 于 2016-7-21 15:37 编辑

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

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

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

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
板凳
发表于 2016-7-21 15:41:12 | 只看该作者
ivf 支持一个扩展的写法,用于在源代码中告知编译器会使用到另一个 obj 文件或 lib 文件
比如
!dec$objcomment lib:'b.obj'
但是这不是标准语法,只适合与 ivf 编译器,且必须使用微软的连接器才支持。

27

帖子

7

主题

0

精华

熟手

F 币
124 元
贡献
66 点
地板
 楼主| 发表于 2016-7-21 16:48:17 | 只看该作者
我用的就是intel Visual Fortran 2013集成在VS2010中的,那么可以将main.for写成

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

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

27

帖子

7

主题

0

精华

熟手

F 币
124 元
贡献
66 点
5#
 楼主| 发表于 2016-7-21 20:03:30 | 只看该作者
vvt 发表于 2016-7-21 15:41
ivf 支持一个扩展的写法,用于在源代码中告知编译器会使用到另一个 obj 文件或 lib 文件
比如
!dec$objcomm ...

我刚刚试了 用一个main程序调用一个lib文件,是可以的; 但是调用obj文件没有成功,无法连接。。。。

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
6#
发表于 2016-7-21 20:19:34 | 只看该作者
那就没办法了,老老实实的把 b.obj 添加在工程里或者linker,input里吧。

27

帖子

7

主题

0

精华

熟手

F 币
124 元
贡献
66 点
7#
 楼主| 发表于 2016-7-21 20:49:49 | 只看该作者
vvt 发表于 2016-7-21 20:19
那就没办法了,老老实实的把 b.obj 添加在工程里或者linker,input里吧。

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

谢谢啦!

1958

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1339 元
贡献
565 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

8#
发表于 2016-7-21 21:15:07 | 只看该作者
试试动态链接库?用 LoadLibrary 和 GetProcAddress 调用(隐式调用)

1

帖子

0

主题

0

精华

新人

F 币
16 元
贡献
3 点
9#
发表于 2020-5-28 17:14:54 | 只看该作者
楼主解决了ABAQUS调用两个子程序(一个for文件,一个obj文件)的方法吗?我现在也在考虑这个

250

帖子

2

主题

0

精华

宗师

F 币
1730 元
贡献
872 点

规矩勋章

10#
发表于 2020-5-29 16:46:30 | 只看该作者
hfx07 发表于 2020-5-28 17:14
楼主解决了ABAQUS调用两个子程序(一个for文件,一个obj文件)的方法吗?我现在也在考虑这个 ...

一个项目中可以同时有obj和for文件,楼上已经说过了,flow3d就是这么弄的,自带了obj,开放了一部分源代码可以修改
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-4-20 19:27

Powered by Tencent X3.4

© 2013-2024 Tencent

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