编译具有大内存要求的Cygwin中的gfortran的问题

时间:2013-12-08 19:57:22

标签: gcc windows-8 compiler-errors cygwin fortran

我的电脑(英特尔酷睿i7 CPU,20 GB内存,2TB硬盘)运行Windows 8,我通常启动Linux VM进行编程,但我目前正在尝试使用Windows 8本机运行Fortran程序Cygwin的。我正在编写一个具有大内存要求的程序,我正在创建一个大小为13943 x Nfiles的双精度数组,我让Nfiles变化,我试图让它尽可能大,同时仍然保持在20 GB的RAM之下。

我注意到当我到达Nfiles = 17000时,它使用大约1.77 GB的RAM。但是,当我将Nfiles提升到20000时,我收到编译错误

gfortran -ffixed-line-length-132 -fimplicit-none -O2   -o smear_sfs.exe xdriver.F90 modules.o
/usr/lib/gcc/x86_64-pc-cygwin/4.8.1/crtbegin.o:cygming-crtbegin.c:(.text+0x2b): relocation truncated to fit: R_X86_64_PC32 against symbol `__imp_GetModuleHandleA' defined in .idata$5 section in /usr/lib/w32api/libkernel32.a(dysgbs00548.o)
/usr/lib/gcc/x86_64-pc-cygwin/4.8.1/crtbegin.o:cygming-crtbegin.c:(.text+0x47): relocation truncated to fit: R_X86_64_PC32 against symbol `__imp_GetProcAddress' defined in .idata$5 section in /usr/lib/w32api/libkernel32.a(dysgbs00598.o)
/usr/lib/gcc/x86_64-pc-cygwin/4.8.1/../../../../x86_64-pc-cygwin/bin/ld: /usr/lib/gcc/x86_64-pc-cygwin/4.8.1/crtbegin.o: bad reloc address 0x0 in section `.pdata'
/usr/lib/gcc/x86_64-pc-cygwin/4.8.1/../../../../x86_64-pc-cygwin/bin/ld: final link failed: Invalid operation
collect2: error: ld returned 1 exit status
Makefile:30: recipe for target `smear_sfs' failed
make: *** [smear_sfs] Error 1

但在网上搜索之后,我无法弄清问题是什么。 gfortran -v显示以下信息

Using built-in specs.
COLLECT_GCC=gfortran
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-cygwin/4.8.1/lto-wrapper.exe
Target: x86_64-pc-cygwin
Configured with: /cygdrive/i/szsz/tmpp/cygwin64/gcc/gcc-4.8.1-3/src/gcc-4.8.1/configure --srcdir=/cygdrive/i/szsz/tmpp/cygwin64/gcc/gcc-4.8.1-3/src/gcc-4.8.1 --prefix=/usr --exec-    prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --libexecdir=/usr/lib --datadir=/usr/share --localstatedir=/var --sysconfdir=/etc --datarootdir=/usr/share --docdir=/usr/share/doc/gcc -C --build=x86_64-pc-cygwin --host=x86_64-pc-cygwin --target=x86_64-pc-cygwin --without-libiconv-prefix --without-libintl-prefix --enable-shared --enable-shared-libgcc --enable-static --enable-version-specific-runtime-libs --enable-bootstrap --disable-__cxa_atexit --with-dwarf2 --with-tune=generic --enable-languages=c,c++,fortran,lto,objc,obj-c++ --enable-graphite --enable-threads=posix --enable-libatomic --enable-libgomp --disable-libitm --enable-libquadmath --enable-libquadmath-support --enable-libssp --enable-libgcj-sublibs --disable-java-awt --disable-symvers --with-ecj-jar=/usr/share/java/ecj.jar --with-gnu-ld --with-gnu-as --with-cloog-include=/usr/include/cloog-isl --without-libiconv-prefix --without-libintl-prefix --with-system-zlib
Thread model: posix
gcc version 4.8.1 (GCC)

所以看起来我在64位操作系统上正确使用64位编译器。

有什么想法吗?

0 个答案:

没有答案
相关问题