특정 회사의 이전 독점 FORTRAN 레거시 코드를 사용하고 있어(그래서 많은 소스 코드를 공개할 수 없음) 파일 상호 작용에 문제가 있습니다. 내 컴파일러 bash 쉘이 Install
호출되고 make newspaper
bash 쉘을 통해 일련의 다른 함수를 호출하여 makefile
생성됩니다 newspaper
. 그러나 출력 파일과 비교 하기 위해 입력 파일에서 호출된 newspaper
다음 . 혹시 오류가 있는지 확인하기 위해 파일을 열어보았습니다 .Install
newspaper
not found
newspaper
텍스트로 변환을 시도했는데 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
명시적으로 명시하기 때문에 이를 더 잘 실행하면 파일이 완전히 생성됩니다.csh
Install
./Install
newspaper