【问题标题】:Library compiling errors with alternate build of gcc使用 gcc 的替代构建的库编译错误
【发布时间】:2015-05-26 18:20:20
【问题描述】:

我有一些 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。指定其他库和头文件 配置搜索标准地点(那些被 系统编译器)用于包含文件和头文件。然而, 可以使用 CPPFLAGS 指定其他目录 和/或 LDFLAGS 变量:

        $ 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 标志。然而,这个错误的所有例子都来自人们的个人脚本,而不是图书馆。如果我遗漏了什么,请告诉我。

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

【问题讨论】:

  • 您是否尝试过使用 gcc-4.8.3 和 gcc-4.9.2 构建和执行简单的程序以确保它们确实有效?
  • @doqtor 是的,简单的程序可以正确构建和执行。但是我刚刚测试了gfortran。我没有 C/C++ 脚本。可以为每一个做一个例子并尝试。
  • @doqtor 简单的 C/C++ 程序也可以工作(只是测试了简单的算术运算和基本 io)
  • 你得到的错误看起来很可能是混合了新旧编译器的东西。我记得很久以前做过类似的事情,然后我手动修改了 hdf5 生成的 Makefile 中的路径,而不是重新定义 env 变量。或者,您可以在虚拟机中安装 centos 并覆盖旧的 gcc 编译器。
  • 我想我首先运行了 configure,然后我修改了生成的 Makefile。几年前,我们不再使用centos,我试图找到一些笔记但没有成功,对不起。

标签: gcc ld hdf5


【解决方案1】:

comment by doqtor 所示,我修改了Makefile 后配置。好像没有设置 CPPFLAGS 和 LDFLAGS 。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    • 2015-01-06
    • 1970-01-01
    • 2011-12-17
    • 2021-06-05
    • 2015-09-01
    • 2011-12-29
    相关资源
    最近更新 更多