에 대한 lib 디렉토리 파일을 만들 수 없습니다 코드 (G77, 나는 생각한다). 이전 Visual Fortran 컴파일러를 사용하여 .dll 및 .lib를 만들고 Visual Studio에서 모든 작업을 연결하고 작업했습니다.나는 오래된 포트란을위한 C의 ++에서 일부 래퍼 함수를 쓴 64 비트 포트란 DLL
문제 지금은 동등한 64 비트 버전을 창조하고있다. 나는 gfortran을 설치했고 64 비트 .dll을 만들었지 만 .lib은 그와 함께 생성되지 않았고 DLL 없이도 링크하지 못하거나 fortran 함수를 호출하지 못했습니다.
나는 나는 .DLL을 만들 수있는 방법 여기$ gfortran -c {filenames.for}
$ gfortran -m64 -shared -mrtd -o dll_foo.dll {filenames.o}
그리고 포트란에서 샘플 서브 루틴은 명령 내 64 비트 .DLL ...
SUBROUTINE KFACT(TR, RHOL, RHOV, FLIQ, FVAP, XK, IWANT, PROPR)
!DEC$ ATTRIBUTES DLLEXPORT :: KFACT
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
INCLUDE 'nprop.cmn'
DIMENSION PROPR(NPROP)
DIMENSION IWANT(NPROP)
C
C SET IWANT VECTOR TO RETURN FUGACITY COEFFICIENT
C
CALL IVZERO(IWANT, NPROP)
IWANT(13) = 1
C
C CALL PROP2 TO RETURN VAP AND LIQ FUGACITY COEFFICIENTS
C
CALL PROPS2(IWANT, 0, TR, RHOL, PROPR)
FLIQ = PROPR(13)
CALL PROPS2(IWANT, 0, TR, RHOV, PROPR)
FVAP = PROPR(13)
C
XK = FLIQ/FVAP
C
RETURN
END
C
SUBROUTINE PDP(DEL, TR, PR, DPRDD, IWANT, PROPR)
을 생성 .lib 파일을 내 Visual Studio (2005) C++ 프로젝트에서 링크 할 수 있습니까?
///////////////////////////// UPDATE //////////////// /////////////
나는 다음과 같은 명령어를 사용하여 .LIB 파일을 생성 할 수있게되었습니다 ...
ar -cru libName.lib {filenames.o}
ranlib libName.lib
내 추가 종속성이 lib 디렉토리를 추가 한 후 VS에서는 모든 Fortran 함수가 호출 될 때 LNK 오류가 발생합니다. 내가 좋아하는 이름을 해결하기 위해 포트란 코드에서 다른 지시를 추가하는 시도
error LNK2028: unresolved token (0A00004A) "extern "C" void __cdecl PSAT(double &,double &,double &,double &,int * const,double * const,int &)" ([email protected]@[email protected]) referenced in function "double __cdecl PFTH(double,double,int)" ([email protected]@[email protected])
error LNK2019: unresolved external symbol "extern "C" void __cdecl PSAT(double &,double &,double &,double &,int * const,double * const,int &)" ([email protected]@[email protected]) referenced in function "double __cdecl PFTH(double,double,int)" ([email protected]@[email protected])
을 c 포트란 선언 ... 같은
extern "C" void PSAT(double& TK, double& PMPA, double& RHOL, double& RHOV, int IWORK[], double PROPR[], int& IERR);
이 기능에 대한 LNK 오류를 봐 ... ++ 그러나 나는 실패했다.
문제가 C 코드, 포트란 코드 또는 lib 디렉토리 파일의 생성에있는 경우 모르겠어요.
도움이 될 것입니다.
나는 내 질문에 분명하다고 생각하지 않습니다. gfortran을 사용하여 .exe를 컴파일하지 않고 VS에서 내 C++ 프로젝트에 연결하려면 .dll이 필요합니다. 나는 명확성을 위해 질문을 편집했다. – Wayne
gfortran 및 VS 바이너리는 호환되지 않습니다. gfortran을 C++ 프로젝트에 연결하려면 gcc에서 C++ 코드를 다시 빌드해야합니다. 기본적으로, 당신은 비주얼 툴을 모든 방법으로 또는 GNU 모든 방법으로 사용합니다. 개체 파일과 DLL 형식이 다릅니다. MS DLL과 달리 GNU DLL에는 DLLMain이 없습니다. – cup
정보를 제공해 주셔서 감사 드리며, CMake와 함께 .lib 파일을 만들었습니다. – Wayne