我在Windows 7上使用来自cygwin(x86_64)的gfortran来编译来自NASA的一些旧的fortran代码。当我使用
gfortran cma.f -o cma.exe
代码编译并运行但需要同一文件夹中的以下四个库才能工作: cyggcc_s-SEH-1.DLL, cyggfortran-3.dll, cygquadmath-0.dll,和 cygwin1.dll
我想让它独立运行,所以我试过
gfortran cma.f -static -o cma.exe
但后来我得到了几个“重定位被截断以适应:R_X86_64_PC32对未定义的符号”错误:
/usr/lib/gcc/x86_64-pc-cygwin/4.9.3/libgfortran.a(write.o): In function `write_float':
/usr/src/debug/gcc-4.9.3-1/libgfortran/io/write_float.def:1300:(.text$write_float+0x15c): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `quadmath_snprintf'
/usr/lib/gcc/x86_64-pc-cygwin/4.9.3/libgfortran.a(write.o): In function `determine_en_precision':
/usr/src/debug/gcc-4.9.3-1/libgfortran/io/write_float.def:1213:(.text$write_float+0x7cf): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `quadmath_snprintf'
/usr/lib/gcc/x86_64-pc-cygwin/4.9.3/libgfortran.a(write.o): In function `write_float':
/usr/src/debug/gcc-4.9.3-1/libgfortran/io/write_float.def:1300:(.text$write_float+0x84e): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `quadmath_snprintf'
/usr/lib/gcc/x86_64-pc-cygwin/4.9.3/libgfortran.a(write.o): In function `output_float_FMT_G_16':
/usr/src/debug/gcc-4.9.3-1/libgfortran/io/write_float.def:1140:(.text$write_float+0xf22): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `quadmath_snprintf'
/usr/src/debug/gcc-4.9.3-1/libgfortran/io/write_float.def:1140:(.text$write_float+0x1781): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `quadmath_snprintf'
/usr/lib/gcc/x86_64-pc-cygwin/4.9.3/libgfortran.a(read.o): In function `_gfortrani_convert_real':
/usr/src/debug/gcc-4.9.3-1/libgfortran/io/read.c:175:(.text$_gfortrani_convert_real+0x72): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `strtoflt128'
/usr/lib/gcc/x86_64-pc-cygwin/4.9.3/libgfortran.a(read.o): In function `_gfortrani_convert_infnan':
/usr/src/debug/gcc-4.9.3-1/libgfortran/io/read.c:251:(.text$_gfortrani_convert_infnan+0x53): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `strtoflt128'
collect2: error: ld returned 1 exit status
我是从源代码编译的新手,但我做了一些编程(主要是在matlab / octave中)。我不知道Fortran,代码长4418行,并且做了一些复杂的热力学。所以修改代码对我来说不是一个很好的选择。
另外我知道它可以在MS Visual Studio的32位Windows控制台应用程序中使用英特尔Fortran编辑器XE2013,Update 5编译器,使用以下选项进行编译:132列,32位版本,没有运行时数组界限检查。但我没有英特尔编译器。
所以它应该只是用于gfortran的编译器选项的问题。我已经尝试了很多不同的标志,到目前为止还没有人做过。那么我怎样才能让exe独立运行“?
有一些类似的问题,但这些解决方案似乎涉及代码的编写方式。我无法更改代码,因此我需要一个涉及如何编译代码的解决方案。
答案 0 :(得分:2)
我认为你必须在cygwin64中删除“-static”。 AFAIK,cygwin64包中只提供了共享库版本的gfortran。