0

我想从 UMFPACK 的 Demos 编译一个非常 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。请让我知道问题出在哪里。谢谢

4

2 回答 2

1

ceilsqrtlibmath类似的函数

您只需要编译字符串中的 -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,它不仅会起作用,而且它在命令行中出现的位置也很重要。

于 2013-01-24T12:21:26.180 回答
0

实际上,我发现我必须将 -lm 添加到 gcc。这很奇怪,因为要知道我们需要什么库并每次都添加它们需要付出很多努力。有没有办法永久添加(例如数学)库?谢谢

于 2013-01-24T12:20:19.590 回答