2017-08-02 30 views
0

我正在尝试在新计算机上编译旧代码的项目。作为背景,代码在32位Linux机器上编译,公司希望它能在64位机器上工作。看来我们正在使用的编译器(Absoft f77:使用Fortran 77选项更改连续行限制的问题

f77 -v 
Absoft 64-bit Pro Fortran 11.5.3 
ERROR: No input files. 

)对一些文件更加严格。具体而言,它不喜欢几个文件中的连续行数。

超过99个固定源代码的连续行是不允许的。

该公司已通过繁琐地更改文件格式来尝试适应99行限制来解决此问题。我负责的部分工作是让程序在新机器上运行。我可以尝试压缩很多问题文件,但许多人对此感到恼火,因为即使“有效”,但由于其他原因(变量组的不同组,名称,比较版本的文件,等等)

我是新来的公司,是Fortran的新手。我已经研究了一堆,但我仍然缺少一些关键概念。

在我的研究中,我想我找到了一个解决方案,尽管我在实施时遇到了麻烦。从Oracle:

续行的连续行的默认最大数量为99 @(1初始和99继续)。要更改这些行数,请使用-Nln选项。 @ https://docs.oracle.com/cd/E19957-01/805-4939/6j4m0vn6l/index.html

如果文本没有正确复制,我很抱歉。我在想,如果我在makefile中使用'-N1'选项,它应该让我指定一些行。到目前为止,我还没有成功;我可能使用不正确。

f77 -N1 100 $(other flags...) 

是不是编译器?从Oracle的建议中,我添加了'-N1 100',尝试了不同的数字,但是任何时候我尝试它,仍然会说99个连续线是极限。我想我错过了一些东西。我的猜测是,我完全错了我通过的选项。

更新: 每个评论,我认为选项是'-Nlxx',但该选项仍然无法正常工作。我想我发现了一些说99行限制在参考指南中是严格的,尽管其他Absoft f77手册说它可以处理无限制的行。 :(

+0

L在链接的网站上点击“改变这一行数,使用-Nl选项”,不是选项“-N100”而不是“-N1 100”? (即,“el”而不是“one”?) – roygvib

+0

嗯......如果是这样的话,我一定还会错误地使用它。我已经用“f77-N1 100”取代了我所有的“f77 -N1 100”电话,但仍然没有运气......我正在放置一个空间。我可以做? – ryanrr

+0

也许找到编译器选项允许更长的行将是有用的... – agentp

回答

-1

这不是一个答案,但它是太长太投入评论。说你有类似

parameter (nmax=20) 
integer mint, ifan 
double precision dat, datasp, oat, zrvs 
common /ahu/dat(nmax), datsp(nmax), oat(nmax), zrvs(nmax), 
&   mint(nmax), ifan 

这是可以改变的,以

parameter (nmax=20) 
parameter (ixfan = 1, ixmint = 2) 
double precision shared 
integer mint, ifan 
double precision dat(nmax), datasp(nmax), oat(nmax), zrvs(nmax) 
common /ahu/ shared(nmax * 4), ishared(nmax + 1) 
equivalence (shared(1), dat), (shared(nmax+1), datasp) 
equivalence (shared(nmax*2+1), oat), (shared(nmax*3+1, zrvs) 
equivalence (ishared(ixfan), ifan), (ishared(ixmint), mint) 

常见块最多可以有两个声明,您可以根据需要提供尽可能多的参数和等价语句,并且它们并非都必须在一行中进行大量连续的干扰,其余程序不需要更改。

+0

这是一个糟糕的建议:为什么不在同一个公共块中使用多个'common'语句? – francescalus

+0

哦,我从来不知道你可以拆分一个共同的块 - 每天学习一些东西。 – cup