使用gcc的替代版本时出现库编译错误

使用gcc的替代版本时出现库编译错误,gcc,ld,hdf5,Gcc,Ld,Hdf5,我有一些fortran程序不能在gfortran的旧版本中编译。我必须运行此程序的多个实例,并且正在使用另一个系统(群集系统),该系统具有centos5_x64和gcc-4.1 因此,我必须构建新版本的gcc;我在我的主文件夹中构建了gcc-4.8.3和gcc-4.9.2。这些程序使用hdf5,因此后者也必须使用相同的编译器进行编译。在删除gfortran-4.8.3和4.8.9上的hdf5依赖项后,我测试了fortran程序,它们得到了正确的构建和执行。我还用新的gcc/g++(s)测试了简单

我有一些fortran程序不能在gfortran的旧版本中编译。我必须运行此程序的多个实例,并且正在使用另一个系统(群集系统),该系统具有centos5_x64和gcc-4.1

因此,我必须构建新版本的gcc;我在我的主文件夹中构建了gcc-4.8.3和gcc-4.9.2。这些程序使用hdf5,因此后者也必须使用相同的编译器进行编译。在删除gfortran-4.8.3和4.8.9上的hdf5依赖项后,我测试了fortran程序,它们得到了正确的构建和执行。我还用新的gcc/g++(s)测试了简单的C/C++程序(带有基本的I/o和算术);他们工作得很好。在编译hdf5库之前,我设置了以下环境变量:

PATH=<GCCPATH>:$PATH
LD_LIBRARY_PATH=<GCCLIB>
LD_RUN_PATH=<GCCLIB>
export PATH
export LD_LIBRARY_PATH
export LD_RUN_PATH
        $ CPPFLAGS=-I/home/robb/include \
          LDFLAGS=-L/home/robb/lib \
在make过程中,我遇到以下错误:

/usr/lib/../lib64/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status
这在两个版本的gcc中都会发生,但在标准位置安装的版本中不会发生(这也发生在另一个安装了GCC4.4的系统中)。通过常规搜索,我知道此错误与缺少
main()
有关,在这种情况下,必须传递
-c
标志。然而,这个错误的所有例子都来自人们的个人脚本,而不是库。如果我遗漏了什么,请告诉我

升级系统操作系统目前还不是一个选择。

如中所示,我修改了
Makefile
post-configure。似乎没有设置CPPFALGS和LDFLAGS


Makefile
中设置正确的cppfagas和LDFLAGS后,编译成功。

您是否尝试过使用gcc-4.8.3和gcc-4.9.2构建和执行简单程序,以确保它们真正工作?@doqtor是简单程序正确构建和执行。但是我刚刚测试了gfortran。我没有C/C++脚本。可以为每一个做一个例子,然后再试一次。@doq或简单的C/C++程序也可以工作(只测试了简单的算术运算和基本io)。您得到的错误很可能是新旧编译器混合的结果。我记得很久以前做过类似的事情,然后我手动修改hdf5生成的Makefile中的路径,而不是重新定义env变量。或者,您可以在虚拟机中安装centos并覆盖旧的gcc编译器。我想我首先运行了configure,然后修改了生成的Makefile。那是几年前,我们不再使用centos了,我试图找到一些笔记,但没有用,对不起。
./configure --prefix=$HOME/HDF5 --enable-fortran
/usr/lib/../lib64/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status