Fortran Coder

查看: 81|回复: 9

[求助] 【求助】老程序在新版本IVF无法链接

[复制链接]

11

帖子

5

主题

0

精华

入门

F 币
58 元
贡献
27 点
发表于 2022-9-20 22:22:13 | 显示全部楼层 |阅读模式
如题,现在手头的程序是一个比较老的数值分析程序,应该是采用CVF编译器编译的,考虑到老编译器的种种不便,现在想用新的IVF+VS2022来编译这个程序;
但是会出现诸多错误,LNK2001,LNK2019,LNK2005等等,请问各位大佬该如何解决,有没有比较好的解决思路。

微信截图_20220920221911.png
微信截图_20220920221911.png

197

帖子

2

主题

0

精华

宗师

F 币
1482 元
贡献
773 点

规矩勋章

发表于 7 天前 | 显示全部楼层
看错误信息不是编译器的问题,你是不是不会编译项目文件?

3

帖子

0

主题

0

精华

宗师

F 币
1089 元
贡献
1002 点
发表于 7 天前 | 显示全部楼层
你是新建的工程,然后添加的源代码吗?
如果是这样,是否多添加或少添加了源代码?

或者,你是双击的 cvf 的 dsw 或 dsp 文件。这种的话,需要在VS里的项目上右键,选择 Extract Compaq Visual Fortran Project Items.

11

帖子

5

主题

0

精华

入门

F 币
58 元
贡献
27 点
 楼主| 发表于 7 天前 | 显示全部楼层
感谢各位大佬, 确实是新手入门。 我之前将原本的三个工程文件都设置成了console application 所以报出了这么多异常。
之后我将主程序保持为应用,其他两个工程改成了静态链接库,上述错误变成了两个:
error LNK2019: 无法解析的外部符号 GETARG,函数 GNINIT 中引用了该符号                relaplib.lib(gninit.obj)        
error LNK2019: 无法解析的外部符号 IARGC,函数 GNINIT 中引用了该符号                relaplib.lib(gninit.obj)
                       

好像是用了不存在的库函数,是现在版本的ivf不支持这个内置函数了吗。

11

帖子

5

主题

0

精华

入门

F 币
58 元
贡献
27 点
 楼主| 发表于 7 天前 | 显示全部楼层
伊芸贾 发表于 2022-9-21 08:47
你是新建的工程,然后添加的源代码吗?
如果是这样,是否多添加或少添加了源代码?

是的,原本的源代码分装在3个文件夹里,所以我建立了3个工程,之前选择了3个应用,然后选择了依赖关系。这里好像应该是一个应用,另外两个设置为两个静态库会报错减少到了两个。
ps:对这里感觉理解不是很透彻,为什么3个应用,然后设置依赖项不行。 新手学习,能烦请稍微解释一下吗。

683

帖子

2

主题

0

精华

大宗师

F 币
3351 元
贡献
2071 点
发表于 7 天前 | 显示全部楼层
heuwcy 发表于 2022-9-21 09:28
感谢各位大佬, 确实是新手入门。 我之前将原本的三个工程文件都设置成了console application 所以报出了这 ...

这俩是ivf的扩展函数,现在也支持。

1785

帖子

13

主题

5

精华

论坛跑堂

臭石头雪球

F 币
587 元
贡献
229 点

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

发表于 7 天前 | 显示全部楼层
heuwcy 发表于 2022-9-21 09:32
是的,原本的源代码分装在3个文件夹里,所以我建立了3个工程,之前选择了3个应用,然后选择了依赖关系。 ...

如果原来的代码就是一个应用,没必要用静态库,就一个工程就行了。原来的代码是否是一个应用,不取决于“他们放在几个文件夹”里,而取决于他们是如何编译的?即编译链接的规则。

设置依赖项,意思是,A依赖B。那么B发生了变化,编译A之前,VS会帮你先重新编译B。


11

帖子

5

主题

0

精华

入门

F 币
58 元
贡献
27 点
 楼主| 发表于 7 天前 | 显示全部楼层
fcode 发表于 2022-9-21 10:04
如果原来的代码就是一个应用,没必要用静态库,就一个工程就行了。原来的代码是否是一个应用,不取决于“ ...

再次感谢,因为针对这种来路不明的老程序,只有这些源代码,说明文档非常有限,是自己尝试着编译看。所以对于现在的情况,我该如何更清楚的了解程序的编译链接的规则,以我的粗浅理解,是不是应该通过cmake(还是makefile?新手不确定)之类的形式进行编译链接。 这样对这方面不会,那么该如何知道他的规则。十分感谢

197

帖子

2

主题

0

精华

宗师

F 币
1482 元
贡献
773 点

规矩勋章

发表于 6 天前 | 显示全部楼层
把所有源程序放到一个project里面编译试试

1785

帖子

13

主题

5

精华

论坛跑堂

臭石头雪球

F 币
587 元
贡献
229 点

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

发表于 6 天前 | 显示全部楼层
heuwcy 发表于 2022-9-21 20:46
再次感谢,因为针对这种来路不明的老程序,只有这些源代码,说明文档非常有限,是自己尝试着编译看。所以 ...

这要看他之前的代码是通过何种方式管理的。
如果是通过 cmake/make 管理的,就需要你了解cmake并阅读makefile了解。
如果是通过 dsw/dsp 工程管理。那直接用VS打开,右键 Extract Compaq Visual Fortran Project Items.
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2022-9-28 18:37

Powered by Tencent X3.4

© 2013-2022 Tencent

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