“重定位被截断以适合”仅与-static一起使用

时间:2015-07-29 16:25:23

标签: windows-7 fortran cygwin gfortran

我在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独立运行“?

有一些类似的问题,但这些解决方案似乎涉及代码的编写方式。我无法更改代码,因此我需要一个涉及如何编译代码的解决方案。

1 个答案:

答案 0 :(得分:2)

我认为你必须在cygwin64中删除“-static”。 AFAIK,cygwin64包中只提供了共享库版本的gfortran。