2017-11-03 1 views
1

최근에 프로그래밍 및 컴파일 작업에 대한 절대적인 스택을 배웠습니다. 내 깊이. 현재, 나는 파이썬에서 IGRF를 사용하는 몇 가지 방법을 갖기 위해 pyigrf12을 설치하려고하고있다. 내 첫 번째 문제는이 모델이 Fortran에서 개발 되었기 때문에 적절한 컴파일러를 찾는 것이 었습니다. MinGW를 사용하여 g77과 gfortran을 설치했습니다.Fortran을 사용하는 Python 모듈 : LNK1112`모듈 유형 'X86'이 (가) 대상 머신 유형 'x64'와 충돌합니다.

각 컴파일러에서 다른 오류가 발생합니다. setup.py 디폴트로 g77을 사용할 때, 프로세스 중에 "Invalid form for assignment ..."오류로 인해 "exit status 1"이 실패했습니다. 그래서 setup.py가 강제로 gfortran.exe를 사용하도록 g77.exe 바이너리의 이름을 변경했습니다 (사용하는 컴파일러를 지정하는 방법이 확실하지 않습니다. 모든 명령 행입니다).

이 컴파일러는 프로세스를 더 진행했지만 결국 "종료 상태 1112 실패"로 종료됩니다. 결과를 살펴보면 컴파일러에서 "치명적인 오류 LNK1112 : 모듈 시스템 유형 'X86'이 (가) 대상 시스템 유형 'x64'와 (와) 충돌합니다. 이 오류를 살펴보면서이 문제와 관련하여 여러 포럼을 방문했습니다. proposed solution in each case은 Visual Studio 환경을 사용하고 있다고 가정하는 것처럼 보였고 '/ MACHINE : IX86'플래그를 변경하기 위해 클릭 할 수있었습니다.

이것은 간단 해 보이지만 명령 줄에서 수행 할 수 있습니까? 그렇다면 어떻게? 현재 setup.py 스크립트를 실행하기 위해 명령 프롬프트 (Windows 컴퓨터)에있는

python setup.py develop 

입니다. 어떤 도움이라도 대단히 감사하겠습니다!

편집 : 내가 작성한 전체 출력은 다음과 같습니다. 아무 것도 변경하지 않았 음을 유의하십시오. 지금까지 컴파일러 만 제어 할 수있었습니다. 다른 모든 것은 피그 르프의 일부입니다. 이 모듈을 컴파일 할 때 문제가 될 수있는 것처럼 보이지만 주변에 문제가 있는지 궁금합니다. 그것이 어떤 종류의 깃발 인 것처럼 보이기 때문에 ... 나는 확실하지 않다. 정직하게 일종의 기적을 기대합니다. 여기에 있습니다 :

running develop 
running build_scripts 
running egg_info 
running build_src 
build_src 
building extension "igrf12" sources 
f2py options: ['--quiet'] 
    adding 'build\src.win-amd64-2.7\build\src.win-amd64-2.7\fortranobject.c' to sources. 
    adding 'build\src.win-amd64-2.7\build\src.win-amd64-2.7' to include_dirs. 
build_src: building npy-pkg config files 
writing requirements to pyigrf12.egg-info\requires.txt 
writing pyigrf12.egg-info\PKG-INFO 
writing top-level names to pyigrf12.egg-info\top_level.txt 
writing dependency_links to pyigrf12.egg-info\dependency_links.txt 
reading manifest file 'pyigrf12.egg-info\SOURCES.txt' 
writing manifest file 'pyigrf12.egg-info\SOURCES.txt' 
running build_ext 
customize MSVCCompiler 
customize MSVCCompiler using build_ext 
customize GnuFCompiler 
Could not locate executable g77 
Could not locate executable f77 
customize IntelVisualFCompiler 
Could not locate executable ifort 
Could not locate executable ifl 
customize AbsoftFCompiler 
Could not locate executable f90 
customize CompaqVisualFCompiler 
Could not locate executable DF 
customize IntelItaniumVisualFCompiler 
Could not locate executable efl 
customize Gnu95FCompiler 
Found executable D:\MinGW\bin\gfortran.exe 
customize Gnu95FCompiler 
customize Gnu95FCompiler using build_ext 
building 'igrf12' extension 
compiling C sources 
C:\Users\XXXXX\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\Bin\amd64\cl.exe /c /nologo /Ox /MD /W3 /GS- /DNDEBUG -Ibuild\src.win-amd64-2.7\build\src.win-amd64-2.7 -IC:\ProgramData\Anaconda2\lib\site-packages\numpy\core\include -IC:\ProgramData\Anaconda2\include -IC:\ProgramData\Anaconda2\PC -IC:\ProgramData\Anaconda2\include -IC:\ProgramData\Anaconda2\PC /Tcbuild\src.win-amd64-2.7\igrf12module.c /Fobuild\temp.win-amd64-2.7\Release\build\src.win-amd64-2.7\igrf12module.obj 
C:\Users\XXXXX\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\Bin\amd64\cl.exe /c /nologo /Ox /MD /W3 /GS- /DNDEBUG -Ibuild\src.win-amd64-2.7\build\src.win-amd64-2.7 -IC:\ProgramData\Anaconda2\lib\site-packages\numpy\core\include -IC:\ProgramData\Anaconda2\include -IC:\ProgramData\Anaconda2\PC -IC:\ProgramData\Anaconda2\include -IC:\ProgramData\Anaconda2\PC /Tcbuild\src.win-amd64-2.7\build\src.win-amd64-2.7\fortranobject.c /Fobuild\temp.win-amd64-2.7\Release\build\src.win-amd64-2.7\build\src.win-amd64-2.7\fortranobject.obj 
compiling Fortran sources 
Fortran f77 compiler: D:\MinGW\bin\gfortran.exe -Wall -g -ffixed-form -fno-second-underscore -O0 
Fortran f90 compiler: D:\MinGW\bin\gfortran.exe -Wall -g -fno-second-underscore -O0 
Fortran fix compiler: D:\MinGW\bin\gfortran.exe -Wall -g -ffixed-form -fno-second-underscore -Wall -g -fno-second-underscore -O0 
compile options: '-Ibuild\src.win-amd64-2.7\build\src.win-amd64-2.7 -IC:\ProgramData\Anaconda2\lib\site-packages\numpy\core\include -IC:\ProgramData\Anaconda2\include -IC:\ProgramData\Anaconda2\PC -IC:\ProgramData\Anaconda2\include -IC:\ProgramData\Anaconda2\PC -c' 
gfortran.exe:f77: fortran/igrf12.f 
C:\Users\XXXXX\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\Bin\amd64\link.exe /DLL /nologo /INCREMENTAL:NO /LIBPATH:d:\mingw\lib\gcc\mingw32\6.3.0 /LIBPATH:d:\mingw\lib /LIBPATH:C:\ProgramData\Anaconda2\libs /LIBPATH:C:\ProgramData\Anaconda2\PCbuild\amd64 /LIBPATH:C:\ProgramData\Anaconda2\PC\VS9.0\amd64 /LIBPATH:C:\ProgramData\Anaconda2\libs /LIBPATH:C:\ProgramData\Anaconda2\PCbuild\amd64 /LIBPATH:C:\ProgramData\Anaconda2\PC\VS9.0\amd64 /EXPORT:initigrf12 build\temp.win-amd64-2.7\Release\build\src.win-amd64-2.7\igrf12module.obj build\temp.win-amd64-2.7\Release\build\src.win-amd64-2.7\build\src.win-amd64-2.7\fortranobject.obj build\temp.win-amd64-2.7\Release\fortran\igrf12.o /OUT:igrf12.pyd /IMPLIB:build\temp.win-amd64-2.7\Release\build\src.win-amd64-2.7\igrf12.lib /MANIFESTFILE:build\temp.win-amd64-2.7\Release\build\src.win-amd64-2.7\igrf12.pyd.manifest 
build\temp.win-amd64-2.7\Release\fortran\igrf12.o : fatal error LNK1112: module machine type 'X86' conflicts with target machine type 'x64' 
+0

g77을 잊어 버리십시오. 프로세스를 방해하지 않는지 확인하십시오. 그것은 ** 완전히 ** 폐기되었으며 오류 메시지에서 해당 코드에 대해 부적절하다는 것이 분명합니다. –

+0

코드 부분 중 하나는 32 비트로 컴파일되고 다른 부분은 64 비트로 컴파일됩니다. 두 가지 유형을 모두 만들어야합니다. 대용량 데이터 세트를 사용하려는 경우 64 비트를 선호합니다. 당신이 선택한 몇 비트가 아니라 출력의 더 많은 부분을 보는 것이 유익 할 것입니다. 플래그가 다르면 gfortran이 Visual C++ 플래그를 허용하지 않습니다. –

+0

전체 출력을 포함하도록 편집되었습니다. – Yoshi

답변

1

로그에서 gfortran의 32 비트 버전을 설치 한 것처럼 보입니다. 나머지 툴체인과 호환 되려면 64 비트 버전이 필요합니다.

실행하려면 gfortran -v을 실행하고 버전 정보를 확인하십시오.

+0

그것은 "스레드 모델 : win32"라고 말하면 32 비트 버전이라고 생각하십니까? 어디에서 gfortran의 64 비트 버전을 찾을 수 있습니까? – Yoshi

+0

다른 모든 버전과 동일한 위치 https://gcc.gnu.org/wiki/GFortranBinaries#Windows –

+0

아니요, 64 비트 버전에도 "스레드 모델 : win32"가 표시됩니다. gfortran -v는 32 비트 시스템 i686 및 64 비트 시스템 x86_64를 호출합니다. 이상적인 세계에서 정보는 COMPILER_OPTIONS() 문자열에 있지만 gfortran에는 없습니다. 이 한 줄짜리 프로그램은 f2003 컴파일러의 bitness를 출력합니다 : ISO_C_BINDING 사용; '(* (g0))', bit_size (0_C_INTPTR_T), 'bits'; 끝내 – user5713492

관련 문제