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

时间:2013-01-24 11:57:00

标签: gcc blas umfpack

我想从Demos of 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。请告诉我问题所在。 感谢

2 个答案:

答案 0 :(得分:1)

ceilsqrt等函数位于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_SPECS中这样做)

但即使您正在编辑后端,默认的libmath也是个坏主意,因为命令行中的库顺序很重要。如果您的.c文件使用库,则必须在此文件后的命令行中指定,类似适用于库间依赖项。因此,无论您是否指定了libmath,它不仅起作用,而且在命令行中它出现的位置也很重要。

答案 1 :(得分:0)

实际上,我发现我必须将-lm添加到gcc。这非常棒,因为需要花费很多精力来确切地知道我们需要什么库并且每次都添加它们。 有没有办法永久添加(例如数学)库? 感谢