当我使用“python setup.py”安装软件时,我得到一个错误,如下所示
Error: Rank mismatch in argument 'c' at (1) (rank-1 and scalar)
error: Command "/usr/local/bin/gfortran -Wall -g -fno-second-underscore -arch x86_64 -fPIC -O3 -funroll-loops -Ibuild/src.macosx-10.9-x86_64-3.7/build/src.macosx-10.9-x86_64-3.7/pyplatefit -I/Users/zhangyunhao/anaconda3/lib/python3.7/site-packages/numpy/core/include -I/Users/zhangyunhao/anaconda3/include/python3.7m -c -c pyNNLS/nnls_burst.f90 -o build/temp.macosx-10.9-x86_64-3.7/pyNNLS/nnls_burst.o" failed with exit status 1
我在github.com/ElmerCSC/elmerfem/issues/231中发现了一个类似的错误,表明该软件和我的gfortran版本不匹配。但我仍然不知道如何用从自制软件安装的gfortran 10.2解决这个问题
文件pyNNLS/nnls_burst.f90
是
double precision FUNCTION DIFF(X,Y)
!
! Function used in tests that depend on machine precision.
!
! The original version of this code was developed by
! Charles L. Lawson and Richard J. Hanson at Jet Propulsion Laboratory
! 1973 JUN 7, and published in the book
! "SOLVING LEAST SQUARES PROBLEMS", Prentice-HalL, 1974.
! Revised FEB 1995 to accompany reprinting of the book by SIAM.
!
double precision :: X, Y
DIFF=X-Y
return
end
SUBROUTINE G1 (A,B,CTERM,STERM,SIG)
!
! COMPUTE ORTHOGONAL ROTATION MATRIX..
!
! The original version of this code was developed by
! Charles L. Lawson and Richard J. Hanson at Jet Propulsion Laboratory
! 1973 JUN 12, and published in the book
! "SOLVING LEAST SQUARES PROBLEMS", Prentice-HalL, 1974.
! Revised FEB 1995 to accompany reprinting of the book by SIAM.
!
! COMPUTE.. MATRIX (C, S) SO THAT (C, S)(A) = (SQRT(A**2+B**2))
! (-S,C) (-S,C)(B) ( 0 )
! COMPUTE SIG = SQRT(A**2+B**2)
! SIG IS COMPUTED LAST TO ALLOW FOR THE POSSIBILITY THAT
! SIG MAY BE IN THE SAME LOCATION AS A OR B .
! ------------------------------------------------------------------
double precision :: A, B, CTERM, ONE, SIG, STERM, XR, YR, ZERO
parameter (ONE = 1.0d0, ZERO = 0.0d0)
! ------------------------------------------------------------------
if (abs(A) .gt. abs(B)) then
XR=B/A
YR=sqrt(ONE+XR**2)
CTERM=sign(ONE/YR,A)
STERM=CTERM*XR
SIG=abs(A)*YR
return
endif
if (B .ne. ZERO) then
XR=A/B
YR=sqrt(ONE+XR**2)
STERM=sign(ONE/YR,B)
CTERM=STERM*XR
SIG=abs(B)*YR
return
endif
SIG=ZERO
CTERM=ZERO
STERM=ONE
return
end SUBROUTINE
! SUBROUTINE H12 (MODE,LPIVOT,L1,M,U,IUE,UP,C,ICE,ICV,NCV)
!
! CONSTRUCTION AND/OR APPLICATION OF A SINGLE
! HOUSEHOLDER TRANSFORMATION.. Q = I + U*(U**T)/B
!
! The original version of this code was developed by
! Charles L. Lawson and Richard J. Hanson at Jet Propulsion Laboratory
! 1973 JUN 12, and published in the book
! "SOLVING LEAST SQUARES PROBLEMS", Prentice-HalL, 1974.
! Revised FEB 1995 to accompany reprinting of the book by SIAM.
! ------------------------------------------------------------------
! Subroutine Arguments
!
! MODE = 1 OR 2 Selects Algorithm H1 to construct and apply a
! Householder transformation, or Algorithm H2 to apply a
! previously constructed transformation.
! LPIVOT IS THE INDEX OF THE PIVOT ELEMENT.
! L1,M IF L1 .LE. M THE TRANSFORMATION WILL BE CONSTRUCTED TO
! ZERO ELEMENTS INDEXED FROM L1 THROUGH M. IF L1 GT. M
! THE SUBROUTINE DOES AN IDENTITY TRANSFORMATION.
! U(),IUE,UP On entry with MODE = 1, U() contains the pivot
! vector. IUE is the storage increment between elements.
! On exit when MODE = 1, U() and UP contain quantities
! defining the vector U of the Householder transformation.
! on entry with MODE = 2, U() and UP should contain
! quantities previously computed with MODE = 1. These will
! not be modified during the entry with MODE = 2.
! C() ON ENTRY with MODE = 1 or 2, C() CONTAINS A MATRIX WHICH
! WILL BE REGARDED AS A SET OF VECTORS TO WHICH THE
! HOUSEHOLDER TRANSFORMATION IS TO BE APPLIED.
! ON EXIT C() CONTAINS THE SET OF TRANSFORMED VECTORS.
! ICE STORAGE INCREMENT BETWEEN ELEMENTS OF VECTORS IN C().
! ICV STORAGE INCREMENT BETWEEN VECTORS IN C().
! NCV NUMBER OF VECTORS IN C() TO BE TRANSFORMED. IF NCV .LE. 0
! NO OPERATIONS WILL BE DONE ON C().
! ------------------------------------------------------------------
SUBROUTINE H12 (MODE,LPIVOT,L1,M,U,IUE,UP,C,ICE,ICV,NCV)
! ------------------------------------------------------------------
integer :: I, I2, I3, I4, ICE, ICV, INCR, IUE, J
integer :: L1, LPIVOT, M, MODE, NCV
double precision :: B, C(*), CL, CLINV, ONE, SM
! double precision U(IUE,M)
double precision :: U(IUE,*)
double precision :: UP
parameter (ONE = 1.0d0)
! ------------------------------------------------------------------
IF (0.GE.LPIVOT.OR.LPIVOT.GE.L1.OR.L1.GT.M) RETURN
CL=abs(U(1,LPIVOT))
IF (MODE.EQ.2) GO TO 60
! ****** CONSTRUCT THE TRANSFORMATION. ******
DO 10 J=L1,M
10 CL=MAX(abs(U(1,J)),CL)
IF (CL) 130,130,20
20 CLINV=ONE/CL
SM=(U(1,LPIVOT)*CLINV)**2
DO 30 J=L1,M
30 SM=SM+(U(1,J)*CLINV)**2
CL=CL*SQRT(SM)
IF (U(1,LPIVOT)) 50,50,40
40 CL=-CL
50 UP=U(1,LPIVOT)-CL
U(1,LPIVOT)=CL
GO TO 70
! ****** APPLY THE TRANSFORMATION I+U*(U**T)/B TO C. ******
!
60 IF (CL) 130,130,70
70 IF (NCV.LE.0) RETURN
B= UP*U(1,LPIVOT)
! B MUST BE NONPOSITIVE HERE. IF B = 0., RETURN.
!
IF (B) 80,130,130
80 B=ONE/B
I2=1-ICV+ICE*(LPIVOT-1)
INCR=ICE*(L1-LPIVOT)
DO 120 J=1,NCV
I2=I2+ICV
I3=I2+INCR
I4=I3
SM=C(I2)*UP
DO 90 I=L1,M
SM=SM+C(I3)*U(1,I)
90 I3=I3+ICE
IF (SM) 100,120,100
100 SM=SM*B
C(I2)=C(I2)+SM*UP
DO 110 I=L1,M
C(I4)=C(I4)+SM*U(1,I)
110 I4=I4+ICE
120 CONTINUE
130 RETURN
END SUBROUTINE
! SUBROUTINE NNLS (A,MDA,M,N,B,X,RNORM,W,ZZ,INDEX,MODE)
!
! Algorithm NNLS: NONNEGATIVE LEAST SQUARES
!
! The original version of this code was developed by
! Charles L. Lawson and Richard J. Hanson at Jet Propulsion Laboratory
! 1973 JUN 15, and published in the book
! "SOLVING LEAST SQUARES PROBLEMS", Prentice-HalL, 1974.
! Revised FEB 1995 to accompany reprinting of the book by SIAM.
!
! GIVEN AN M BY N MATRIX, A, AND AN M-VECTOR, B, COMPUTE AN
! N-VECTOR, X, THAT SOLVES THE LEAST SQUARES PROBLEM
!
! A * X = B SUBJECT TO X .GE. 0
! ------------------------------------------------------------------
! Subroutine Arguments
!
! A(),MDA,M,N MDA IS THE FIRST DIMENSIONING PARAMETER FOR THE
! ARRAY, A(). ON ENTRY A() CONTAINS THE M BY N
! MATRIX, A. ON EXIT A() CONTAINS
! THE PRODUCT MATRIX, Q*A , WHERE Q IS AN
! M BY M ORTHOGONAL MATRIX GENERATED IMPLICITLY BY
! THIS SUBROUTINE.
! B() ON ENTRY B() CONTAINS THE M-VECTOR, B. ON EXIT B() CON-
! TAINS Q*B.
! X() ON ENTRY X() NEED NOT BE INITIALIZED. ON EXIT X() WILL
! CONTAIN THE SOLUTION VECTOR.
! RNORM ON EXIT RNORM CONTAINS THE EUCLIDEAN NORM OF THE
! RESIDUAL VECTOR.
! W() AN N-ARRAY OF WORKING SPACE. ON EXIT W() WILL CONTAIN
! THE DUAL SOLUTION VECTOR. W WILL SATISFY W(I) = 0.
! FOR ALL I IN SET P AND W(I) .LE. 0. FOR ALL I IN SET Z
! ZZ() AN M-ARRAY OF WORKING SPACE.
! INDEX() AN INTEGER WORKING ARRAY OF LENGTH AT LEAST N.
! ON EXIT THE CONTENTS OF THIS ARRAY DEFINE THE SETS
! P AND Z AS FOLLOWS..
!
! INDEX(1) THRU INDEX(NSETP) = SET P.
! INDEX(IZ1) THRU INDEX(IZ2) = SET Z.
! IZ1 = NSETP + 1 = NPP1
! IZ2 = N
! MODE THIS IS A SUCCESS-FAILURE FLAG WITH THE FOLLOWING
! MEANINGS.
! 1 THE SOLUTION HAS BEEN COMPUTED SUCCESSFULLY.
! 2 THE DIMENSIONS OF THE PROBLEM ARE BAD.
! EITHER M .LE. 0 OR N .LE. 0.
! 3 ITERATION COUNT EXCEEDED. MORE THAN 3*N ITERATIONS.
!
! ------------------------------------------------------------------
SUBROUTINE NNLS (A,MDA,M,N,B,X,RNORM,W,ZZ,INDEX,MODE)
! ------------------------------------------------------------------
integer :: I, II, IP, ITER, ITMAX, IZ, IZ1, IZ2, IZMAX, J, JJ, JZ, L
integer :: M, MDA, MODE,N, NPP1, NSETP, RTNKEY
! integer INDEX(N)
! double precision A(MDA,N), B(M), W(N), X(N), ZZ(M)
integer :: INDEX(*)
double precision :: A(MDA,*), B(*), W(*), X(*), ZZ(*)
double precision :: ALPHA, ASAVE, CC, DIFF, DUMMY, FACTOR, RNORM
double precision :: SM, SS, T, TEMP, TWO, UNORM, UP, WMAX
double precision :: ZERO, ZTEST
parameter (FACTOR = 0.01d0)
parameter (TWO = 2.0d0, ZERO = 0.0d0)
! ------------------------------------------------------------------
MODE=1
IF (M .le. 0 .or. N .le. 0) then
MODE=2
RETURN
endif
ITER=0
ITMAX=3*N
!
! INITIALIZE THE ARRAYS INDEX() AND X().
!
DO 20 I=1,N
X(I)=ZERO
20 INDEX(I)=I
!
IZ2=N
IZ1=1
NSETP=0
NPP1=1
! ****** MAIN LOOP BEGINS HERE ******
30 CONTINUE
! QUIT IF ALL COEFFICIENTS ARE ALREADY IN THE SOLUTION.
! OR IF M COLS OF A HAVE BEEN TRIANGULARIZED.
!
IF (IZ1 .GT.IZ2.OR.NSETP.GE.M) GO TO 350
!
! COMPUTE COMPONENTS OF THE DUAL (NEGATIVE GRADIENT) VECTOR W().
!
DO 50 IZ=IZ1,IZ2
J=INDEX(IZ)
SM=ZERO
DO 40 L=NPP1,M
40 SM=SM+A(L,J)*B(L)
W(J)=SM
50 continue
! FIND LARGEST POSITIVE W(J).
60 continue
WMAX=ZERO
DO 70 IZ=IZ1,IZ2
J=INDEX(IZ)
IF (W(J) .gt. WMAX) then
WMAX=W(J)
IZMAX=IZ
endif
70 CONTINUE
!
! IF WMAX .LE. 0. GO TO TERMINATION.
! THIS INDICATES SATISFACTION OF THE KUHN-TUCKER CONDITIONS.
!
IF (WMAX .le. ZERO) go to 350
IZ=IZMAX
J=INDEX(IZ)
!
! THE SIGN OF W(J) IS OK FOR J TO BE MOVED TO SET P.
! BEGIN THE TRANSFORMATION AND CHECK NEW DIAGONAL ELEMENT TO AVOID
! NEAR LINEAR DEPENDENCE.
!
ASAVE=A(NPP1,J)
CALL H12 (1,NPP1,NPP1+1,M,A(1,J),1,UP,DUMMY,1,1,0)
UNORM=ZERO
IF (NSETP .ne. 0) then
DO 90 L=1,NSETP
90 UNORM=UNORM+A(L,J)**2
endif
UNORM=sqrt(UNORM)
IF (DIFF(UNORM+ABS(A(NPP1,J))*FACTOR,UNORM) .gt. ZERO) then
!
! COL J IS SUFFICIENTLY INDEPENDENT. COPY B INTO ZZ, UPDATE ZZ
! AND SOLVE FOR ZTEST ( = PROPOSED NEW VALUE FOR X(J) ).
!
DO 120 L=1,M
120 ZZ(L)=B(L)
CALL H12 (2,NPP1,NPP1+1,M,A(1,J),1,UP,ZZ,1,1,1)
ZTEST=ZZ(NPP1)/A(NPP1,J)
!
! SEE IF ZTEST IS POSITIVE
!
IF (ZTEST .gt. ZERO) go to 140
endif
!
! REJECT J AS A CANDIDATE TO BE MOVED FROM SET Z TO SET P.
! RESTORE A(NPP1,J), SET W(J)=0., AND LOOP BACK TO TEST DUAL
! COEFFS AGAIN.
!
A(NPP1,J)=ASAVE
W(J)=ZERO
GO TO 60
!
! THE INDEX J=INDEX(IZ) HAS BEEN SELECTED TO BE MOVED FROM
! SET Z TO SET P. UPDATE B, UPDATE INDICES, APPLY HOUSEHOLDER
! TRANSFORMATIONS TO COLS IN NEW SET Z, ZERO SUBDIAGONAL ELTS IN
! COL J, SET W(J)=0.
!
140 continue
DO 150 L=1,M
150 B(L)=ZZ(L)
!
INDEX(IZ)=INDEX(IZ1)
INDEX(IZ1)=J
IZ1=IZ1+1
NSETP=NPP1
NPP1=NPP1+1
!
IF (IZ1 .le. IZ2) then
DO 160 JZ=IZ1,IZ2
JJ=INDEX(JZ)
CALL H12 (2,NSETP,NPP1,M,A(1,J),1,UP,A(1,JJ),1,MDA,1)
160 continue
endif
!
IF (NSETP .ne. M) then
DO 180 L=NPP1,M
180 A(L,J)=ZERO
endif
!
W(J)=ZERO
! SOLVE THE TRIANGULAR SYSTEM.
! STORE THE SOLUTION TEMPORARILY IN ZZ().
RTNKEY = 1
GO TO 400
200 CONTINUE
!
! ****** SECONDARY LOOP BEGINS HERE ******
!
! ITERATION COUNTER.
!
210 continue
ITER=ITER+1
IF (ITER .gt. ITMAX) then
MODE=3
! write (*,'(/a)') ' NNLS quitting on iteration count.'
GO TO 350
endif
!
! SEE IF ALL NEW CONSTRAINED COEFFS ARE FEASIBLE.
! IF NOT COMPUTE ALPHA.
!
ALPHA=TWO
DO 240 IP=1,NSETP
L=INDEX(IP)
IF (ZZ(IP) .le. ZERO) then
T=-X(L)/(ZZ(IP)-X(L))
IF (ALPHA .gt. T) then
ALPHA=T
JJ=IP
endif
endif
240 CONTINUE
!
! IF ALL NEW CONSTRAINED COEFFS ARE FEASIBLE THEN ALPHA WILL
! STILL = 2. IF SO EXIT FROM SECONDARY LOOP TO MAIN LOOP.
!
IF (ALPHA.EQ.TWO) GO TO 330
!
! OTHERWISE USE ALPHA WHICH WILL BE BETWEEN 0. AND 1. TO
! INTERPOLATE BETWEEN THE OLD X AND THE NEW ZZ.
!
DO 250 IP=1,NSETP
L=INDEX(IP)
X(L)=X(L)+ALPHA*(ZZ(IP)-X(L))
250 continue
!
! MODIFY A AND B AND THE INDEX ARRAYS TO MOVE COEFFICIENT I
! FROM SET P TO SET Z.
!
I=INDEX(JJ)
260 continue
X(I)=ZERO
!
IF (JJ .ne. NSETP) then
JJ=JJ+1
DO 280 J=JJ,NSETP
II=INDEX(J)
INDEX(J-1)=II
CALL G1 (A(J-1,II),A(J,II),CC,SS,A(J-1,II))
A(J,II)=ZERO
DO 270 L=1,N
IF (L.NE.II) then
!
! Apply procedure G2 (CC,SS,A(J-1,L),A(J,L))
!
TEMP = A(J-1,L)
A(J-1,L) = CC*TEMP + SS*A(J,L)
A(J,L) =-SS*TEMP + CC*A(J,L)
endif
270 CONTINUE
!
! Apply procedure G2 (CC,SS,B(J-1),B(J))
!
TEMP = B(J-1)
B(J-1) = CC*TEMP + SS*B(J)
B(J) =-SS*TEMP + CC*B(J)
280 continue
endif
!
NPP1=NSETP
NSETP=NSETP-1
IZ1=IZ1-1
INDEX(IZ1)=I
!
! SEE IF THE REMAINING COEFFS IN SET P ARE FEASIBLE. THEY SHOULD
! BE BECAUSE OF THE WAY ALPHA WAS DETERMINED.
! IF ANY ARE INFEASIBLE IT IS DUE TO ROUND-OFF ERROR. ANY
! THAT ARE NONPOSITIVE WILL BE SET TO ZERO
! AND MOVED FROM SET P TO SET Z.
!
DO 300 JJ=1,NSETP
I=INDEX(JJ)
IF (X(I) .le. ZERO) go to 260
300 CONTINUE
!
! COPY B( ) INTO ZZ( ). THEN SOLVE AGAIN AND LOOP BACK.
!
DO 310 I=1,M
310 ZZ(I)=B(I)
RTNKEY = 2
GO TO 400
320 CONTINUE
GO TO 210
! ****** END OF SECONDARY LOOP ******
!
330 continue
DO 340 IP=1,NSETP
I=INDEX(IP)
340 X(I)=ZZ(IP)
! ALL NEW COEFFS ARE POSITIVE. LOOP BACK TO BEGINNING.
GO TO 30
!
! ****** END OF MAIN LOOP ******
!
! COME TO HERE FOR TERMINATION.
! COMPUTE THE NORM OF THE FINAL RESIDUAL VECTOR.
!
350 continue
SM=ZERO
IF (NPP1 .le. M) then
DO 360 I=NPP1,M
360 SM=SM+B(I)**2
else
DO 380 J=1,N
380 W(J)=ZERO
endif
RNORM=sqrt(SM)
RETURN
!
! THE FOLLOWING BLOCK OF CODE IS USED AS AN INTERNAL SUBROUTINE
! TO SOLVE THE TRIANGULAR SYSTEM, PUTTING THE SOLUTION IN ZZ().
!
400 continue
DO 430 L=1,NSETP
IP=NSETP+1-L
IF (L .ne. 1) then
DO 410 II=1,IP
ZZ(II)=ZZ(II)-A(II,JJ)*ZZ(IP+1)
410 continue
endif
JJ=INDEX(IP)
ZZ(IP)=ZZ(IP)/A(IP,JJ)
430 continue
go to (200, 320), RTNKEY
END SUBROUTINE
当我试图用gfortran作为gfortran nnls_burst.f90
编译这个文件时
nnls_burst.f90:113:32:
113 | 10 CL=MAX(abs(U(1,J)),CL)
| 1
Warning: Fortran 2018 deleted feature: DO termination statement which is not END DO or CONTINUE with label 10 at (1)
nnls_burst.f90:114:24:
114 | IF (CL) 130,130,20
| 1
Warning: Fortran 2018 deleted feature: Arithmetic IF statement at (1)
nnls_burst.f90:118:33:
118 | 30 SM=SM+(U(1,J)*CLINV)**2
| 1
Warning: Fortran 2018 deleted feature: DO termination statement which is not END DO or CONTINUE with label 30 at (1)
nnls_burst.f90:120:31:
120 | IF (U(1,LPIVOT)) 50,50,40
| 1
Warning: Fortran 2018 deleted feature: Arithmetic IF statement at (1)
nnls_burst.f90:127:24:
127 | 60 IF (CL) 130,130,70
| 1
Warning: Fortran 2018 deleted feature: Arithmetic IF statement at (1)
nnls_burst.f90:132:23:
132 | IF (B) 80,130,130
| 1
Warning: Fortran 2018 deleted feature: Arithmetic IF statement at (1)
nnls_burst.f90:143:23:
143 | 90 I3=I3+ICE
| 1
Warning: Fortran 2018 deleted feature: DO termination statement which is not END DO or CONTINUE with label 90 at (1)
nnls_burst.f90:144:29:
144 | IF (SM) 100,120,100
| 1
Warning: Fortran 2018 deleted feature: Arithmetic IF statement at (1)
nnls_burst.f90:149:23:
149 | 110 I4=I4+ICE
| 1
Warning: Fortran 2018 deleted feature: DO termination statement which is not END DO or CONTINUE with label 110 at (1)
nnls_burst.f90:230:20:
230 | 20 INDEX(I)=I
| 1
Warning: Fortran 2018 deleted feature: DO termination statement which is not END DO or CONTINUE with label 20 at (1)
nnls_burst.f90:249:30:
249 | 40 SM=SM+A(L,J)*B(L)
| 1
Warning: Fortran 2018 deleted feature: DO termination statement which is not END DO or CONTINUE with label 40 at (1)
nnls_burst.f90:279:33:
279 | 90 UNORM=UNORM+A(L,J)**2
| 1
Warning: Fortran 2018 deleted feature: DO termination statement which is not END DO or CONTINUE with label 90 at (1)
nnls_burst.f90:288:23:
288 | 120 ZZ(L)=B(L)
| 1
Warning: Fortran 2018 deleted feature: DO termination statement which is not END DO or CONTINUE with label 120 at (1)
nnls_burst.f90:312:19:
312 | 150 B(L)=ZZ(L)
| 1
Warning: Fortran 2018 deleted feature: DO termination statement which is not END DO or CONTINUE with label 150 at (1)
nnls_burst.f90:329:23:
329 | 180 A(L,J)=ZERO
| 1
Warning: Fortran 2018 deleted feature: DO termination statement which is not END DO or CONTINUE with label 180 at (1)
nnls_burst.f90:431:20:
431 | 310 ZZ(I)=B(I)
| 1
Warning: Fortran 2018 deleted feature: DO termination statement which is not END DO or CONTINUE with label 310 at (1)
nnls_burst.f90:441:21:
441 | 340 X(I)=ZZ(IP)
| 1
Warning: Fortran 2018 deleted feature: DO termination statement which is not END DO or CONTINUE with label 340 at (1)
nnls_burst.f90:454:25:
454 | 360 SM=SM+B(I)**2
| 1
Warning: Fortran 2018 deleted feature: DO termination statement which is not END DO or CONTINUE with label 360 at (1)
nnls_burst.f90:457:21:
457 | 380 W(J)=ZERO
| 1
Warning: Fortran 2018 deleted feature: DO termination statement which is not END DO or CONTINUE with label 380 at (1)
nnls_burst.f90:275:44:
275 | CALL H12 (1,NPP1,NPP1+1,M,A(1,J),1,UP,DUMMY,1,1,0)
| 1
Error: Rank mismatch in argument 'c' at (1) (rank-1 and scalar)
现在我知道这个错误是由古代研究人员开发的文件中的错误编码造成的
目前没有回答
相关问题 更多 >
编程相关推荐