Gcc 使用UMFPACK编译示例文件时出错

Gcc 使用UMFPACK编译示例文件时出错,gcc,blas,umfpack,Gcc,Blas,Umfpack,我想从umfpack的演示中编译一个非常简单的umfpack_simple.c,但我遇到了以下错误: [root@localhost Test]# gcc -I../UMFPACK/Include -I../AMD/Include - I../SuiteSparse_config -I../GotoBLAS2 umfpack_simple.c libumfpack.a libamd.a libgoto2.a libsuitesparseconfig.a libgoto2_nehalem-ra.

我想从umfpack的演示中编译一个非常简单的umfpack_simple.c,但我遇到了以下错误:

[root@localhost Test]# gcc -I../UMFPACK/Include -I../AMD/Include -

I../SuiteSparse_config -I../GotoBLAS2 umfpack_simple.c libumfpack.a libamd.a libgoto2.a libsuitesparseconfig.a libgoto2_nehalem-ra.13.a -lrt
gcc: error: libgoto2_nehalem-ra.13.a: No such file or directory
[root@localhost Test]# ls
libamd.a    libgoto2_nehalem-r1.13.a  libumfpack.a
libgoto2.a  libsuitesparseconfig.a    umfpack_simple.c
[root@localhost Test]# gcc -I../UMFPACK/Include -I../AMD/Include -I../SuiteSparse_config -I../GotoBLAS2 umfpack_simple.c libumfpack.a libamd.a libgoto2.a libsuitesparseconfig.a libgoto2_nehalem-r1.13.a -lrt
libumfpack.a(umf_di_mem_alloc_element.o): In function `umfdi_mem_alloc_element':
umf_mem_alloc_element.c:(.text+0x88): undefined reference to `ceil'
umf_mem_alloc_element.c:(.text+0xb6): undefined reference to `ceil'
libumfpack.a(umf_di_set_stats.o): In function `umf_i_set_stats':
umf_set_stats.c:(.text+0x151): undefined reference to `ceil'
umf_set_stats.c:(.text+0x185): undefined reference to `ceil'
umf_set_stats.c:(.text+0x1ae): undefined reference to `ceil'
libumfpack.a(umf_di_set_stats.o):umf_set_stats.c:(.text+0x207): more undefined references to `ceil' follow
libumfpack.a(umf_di_start_front.o): In function `umfdi_start_front':
umf_start_front.c:(.text+0x397): undefined reference to `sqrt'
umf_start_front.c:(.text+0x3b5): undefined reference to `sqrt'
libumfpack.a(umfpack_di_qsymbolic.o): In function `symbolic_analysis':
umfpack_qsymbolic.c:(.text+0x715): undefined reference to `ceil'
umfpack_qsymbolic.c:(.text+0x745): undefined reference to `ceil'
umfpack_qsymbolic.c:(.text+0x76d): undefined reference to `ceil'
umfpack_qsymbolic.c:(.text+0x79e): undefined reference to `ceil'
umfpack_qsymbolic.c:(.text+0x7d8): undefined reference to `ceil'
libumfpack.a(umfpack_di_qsymbolic.o):umfpack_qsymbolic.c:(.text+0x803): more undefined references to `ceil' follow
libumfpack.a(umfpack_di_qsymbolic.o): In function `symbolic_analysis':
umfpack_qsymbolic.c:(.text+0x4e23): undefined reference to `sqrt'
umfpack_qsymbolic.c:(.text+0x4fb4): undefined reference to `sqrt'
libumfpack.a(umf_i_colamd.o): In function `umf_i_colamd':
umf_colamd.c:(.text+0x1a82): undefined reference to `sqrt'
umf_colamd.c:(.text+0x1ab8): undefined reference to `sqrt'
umf_colamd.c:(.text+0x1aec): undefined reference to `sqrt'
libumfpack.a(umf_i_colamd.o):umf_colamd.c:(.text+0x1b15): more undefined references to `sqrt' follow
collect2: error: ld returned 1 exit status
可以看出,我错过了一些定义ceil和sqrt的库。我正在使用GotoBLAS2和UMFPACK。请告诉我问题出在哪里。
谢谢

事实上,我发现我必须在gcc中添加-lm。这是非常奇怪的,因为要准确地知道我们需要什么库并每次添加它们需要花费大量的努力。 是否有办法永久添加(如数学)库?
谢谢

ceil
sqrt
这样的函数都在libmath中

您所需要的只是编译字符串中的-lm。因此,请尝试:

gcc-I../UMFPACK/Include-I../AMD/Include-I../SuiteSparse_config-I../GotoBLAS2 UMFPACK_simple.c libumfpack.a libamd.a libgoto2.a libsuitesparseconfig.a libgoto2_nehalem-r1.13.a-lm-lrt

另外,我要注意,您可以使用
-L
选项指定库搜索路径

UPD:回答您在评论中的问题,不,您不能指定“默认”libmath(除非您不编辑编译器后端,您可以在LINK_规范中进行编辑)

但即使您正在编辑后端,默认的libmath也是个坏主意,因为命令行中库的顺序很重要。若您的.c文件使用库,那个么必须在该文件之后的命令行中指定它,类似的情况也适用于库间依赖关系。因此,它不仅在您是否指定libmath时起作用,而且在命令行中它出现的位置也很重要