以前のバージョンのFORTRANでバイナリをデバッグする方法は?助ける

以前のバージョンのFORTRANでバイナリをデバッグする方法は?助ける

特定の会社の以前の排他的なFORTRANレガシーコードを使用しているため(多くのソースコードを公開できません)、ファイルのやり取りに問題があります。私のコンパイラbashシェルがInstall呼び出され、make newspaperbashシェルを介して一連の他の関数を呼び出すことによってmakefile生成されますnewspaper。ただし、出力ファイルと比較するために入力ファイルから呼び出されますnewspaper。エラーがないかどうかを確認するためにファイルを開いてみました。Installnewspapernot foundnewspaper

テキストに変換しようとしましたが、newspaper数字でいっぱいのテキストファイルが作成されました。何が間違っていてnot found問題が発生したのかを調べるには、ファイルを「コード」として読み取る必要があります。

明確にするために:

  • newspaper端末で実行されたときと同じバイナリファイルです。less newspaper私のLinuxオペレータはバイナリファイルだと言います。
  • newspaper内部呼び出しのInstall形式は次のnewspaper < xfile1R.in > f1.testとおりです。diff xfile1R.out f1.test > f1.dif
  • gfortranはUbuntuで使用されるコンパイラで、cドライブはマウントディスクです。
  • リトルエンディアンは、使用されるバイナリ形式に基づいている必要があります。このウェブサイト

私はLinuxとFORTRANに関して愚かな奴です。私はただ初歩的な間違いを犯しているかもしれません。どんなアドバイスも本当にありがとうございます。これがLinuxの問題なのかFORTRANの問題なのか分かりません。

roman@DESKTOP-QKJTF3S:/mnt/c/Users/roman/Documents/NEWSPAPER/Newspaper/Newspaper$ sh ./Install.sh
cat makefile.sh >makefile
chmod a+x makefile
make: 'newspaper' is up to date.
./Install.sh: 10: newspaper: not found
./Install.sh: 12: newspaper: not found
./Install.sh: 14: newspaper: not found
./Install.sh: 16: newspaper: not found
./Install.sh: 18: newspaper: not found
./Install.sh: 20: newspaper: not found
 84 -rwxrwxrwx 1 roman roman  83071 Feb 17 16:08 f1.dif
152 -rwxrwxrwx 1 roman roman 153543 Feb 17 16:08 f2.dif
108 -rwxrwxrwx 1 roman roman 109718 Feb 17 16:08 f3.dif
232 -rwxrwxrwx 1 roman roman 236209 Feb 17 16:08 f4.dif
164 -rwxrwxrwx 1 roman roman 166612 Feb 17 16:08 f5.dif
 48 -rwxrwxrwx 1 roman roman  48898 Feb 17 16:08 f6.dif
./Install.sh: 31: Syntax error: newline unexpected

編集1:file newspaper確認してくださいPATH

roman@DESKTOP-QKJTF3S:/mnt/c/Users/roman/Documents/NEWSPAPER/Newspaper/Newspaper$ file newspaper
newspaper: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, BuildID[sha1]=8ac6de30da50639d7e3ea55a09416b049a5291c0, for GNU/Linux 3.2.0, not stripped

編集2:ファイルを回復しますか?

#
# Makefile for newspaper
#

OBJF = \
    sfun1.o \
    sfun2.o \
    sfun3.o \
    sfun4.o \
    sfun5.o \
    sfun6.o \
    sfun7.o 


FLAGS = -O2 -static -std=legacy
COMP  = gfortran

newspaper: $(OBJF)
    $(COMP) $(FLAGS) -o newspaper $(OBJF)

.f.o:
    $(COMP) $(FLAGS) -c $< -o $*.o

編集3:Installエラー

#! /bin/csh -f

make flops

./newspaper < xfile1R.in > f1.test
diff xfile1R.out f1.test > f1.dif
./newspaper < xfile2R.in > f2.test
diff xfile2R.out f2.test > f2.dif
./newspaper < xfile3R.in > f3.test
diff xfile3R.out f3.test > f3.dif
./newspaper < xfile4R.in > f4.test
diff xfile4R.out f4.test > f4.dif
./newspaper < xfile5R.in > f5.test
diff xfile5R.out f5.test > f5.dif
./newspaper < xfile6.in > f6.test
diff xfile6.out f6.test > f6.dif

ls -als *.dif

# User input for directory to put executable
if ( $1 == '' ) then
   echo " "
   echo -n "Enter directory for executable file: "
   set Edir = $<
else
   set Edir = $1
endif

if ( $Edir != '' ) then
   mv newspaper $Edir
endif

編集4:より多くの構文エラー、同じエラー

./Install.sh: 30: Syntax error: newline unexpected
roman@DESKTOP-QKJTF3S:/mnt/c/Users/roman/Documents/NEWSPAPER/Newspaper/Newspaper$ ./
-bash: ./: Is a directory
roman@DESKTOP-QKJTF3S:

編集5:cshの確認

roman@DESKTOP-QKJTF3S:/mnt/c/Users/roman/Documents/NEWSPAPER/Newspaper/Newspaper$ sudo apt-get install csh
Reading package lists... Done
Building dependency tree
Reading state information... Done
csh is already the newest version (20110502-5).
0 upgraded, 0 newly installed, 0 to remove and 20 not upgraded.

編集6:成功! !初心者の私を案内してくれた@steeldriverに感謝します。

164 -rwxrwxrwx 1 roman roman 164829 Feb 17 21:36 f1.dif
304 -rwxrwxrwx 1 roman roman 307257 Feb 17 21:36 f2.dif
216 -rwxrwxrwx 1 roman roman 217791 Feb 17 21:36 f3.dif
460 -rwxrwxrwx 1 roman roman 468651 Feb 17 21:36 f4.dif
324 -rwxrwxrwx 1 roman roman 331213 Feb 17 21:36 f5.dif
 96 -rwxrwxrwx 1 roman roman  96955 Feb 17 21:36 f6.dif

Enter directory for executable file: ./Outputs
roman@DESKTOP-QKJTF3S:/mnt/c/Users/roman/

ベストアンサー1

成功したデバッグの後、makefile は bash シェルの使用によって一部の編集が必要になるため、ほとんどの変更はスクリプトを明示的に実行するときに行われますnewspaper <input_file.in>..../newspaper <input_file.in>...sh間違ったこれがどのように機能するかは、ファイルが別のシェルコンパイラをInstall明示的に指定するため、これをよりよく実行するとファイルが完全に生成されます。cshInstall./Installnewspaper

おすすめ記事