库编译错误与 gcc 的替代构建
Library compiling errors with alternate build of gcc
我有一些 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
HDF5具体说明
4.3.7. Specifying other libraries and headers
Configure searches the standard places (those places known by the
systems compiler) for include files and header files. However,
additional directories can be specified by using the CPPFLAGS
and/or LDFLAGS variables:
$ CPPFLAGS=-I/home/robb/include \
LDFLAGS=-L/home/robb/lib \
LDFLAGS=-L<GCCLIB>
CPPFLAGS=-I<GCCINCLUDE>
然后配置为:
./configure --prefix=$HOME/HDF5 --enable-fortran
在 make 过程中我得到这个错误:
/usr/lib/../lib64/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status
两个版本的 gcc 都会发生这种情况,但安装在标准位置的版本不会发生这种情况(这也发生在另一个安装了 gcc 4.4 的系统中)。通过一般搜索,我知道这个错误与 main()
的缺失有关,在这种情况下,必须传递 -c
标志。但是,此错误的所有示例都来自人们的个人脚本,而不是图书馆。如果我遗漏了什么,请告诉我。
升级系统OS目前不是一个选择。
如中所述,我修改了Makefile
post配置。似乎没有设置 CPPFLAGS 和 LDFLAGS。
在 Makefile
中设置正确的 CPPFLAGS 和 LDFLAGS 后,编译成功。
我有一些 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
HDF5具体说明
4.3.7. Specifying other libraries and headers Configure searches the standard places (those places known by the systems compiler) for include files and header files. However, additional directories can be specified by using the CPPFLAGS and/or LDFLAGS variables:
$ CPPFLAGS=-I/home/robb/include \ LDFLAGS=-L/home/robb/lib \
LDFLAGS=-L<GCCLIB>
CPPFLAGS=-I<GCCINCLUDE>
然后配置为:
./configure --prefix=$HOME/HDF5 --enable-fortran
在 make 过程中我得到这个错误:
/usr/lib/../lib64/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status
两个版本的 gcc 都会发生这种情况,但安装在标准位置的版本不会发生这种情况(这也发生在另一个安装了 gcc 4.4 的系统中)。通过一般搜索,我知道这个错误与 main()
的缺失有关,在这种情况下,必须传递 -c
标志。但是,此错误的所有示例都来自人们的个人脚本,而不是图书馆。如果我遗漏了什么,请告诉我。
升级系统OS目前不是一个选择。
如Makefile
post配置。似乎没有设置 CPPFLAGS 和 LDFLAGS。
在 Makefile
中设置正确的 CPPFLAGS 和 LDFLAGS 后,编译成功。