我想从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。请让我知道问题出在哪里。谢谢
发布于 2013-01-24 20:21:26
像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选项来指定库搜索路径。
更新:在评论中回答您的问题,不,您不能指定“默认”libmath (除非您不是在编辑编译器后端,您可以在LINK_SPECS中进行编辑)
但是即使你正在编辑后端,默认的libmath也不是一个好主意,因为库在命令行中的顺序很重要。如果您的.c文件使用库,则必须在此文件之后的命令行中指定它,类似的情况也适用于库之间的依赖关系。因此,无论您是否指定了libmath,它不仅扮演着重要的角色,它在命令行中出现的位置也很重要。
发布于 2013-01-24 20:20:20
实际上,我想我必须将-lm添加到gcc。这是非常奇怪的,因为它需要大量的努力来确切地知道我们需要什么库,并每次都添加它们。有没有办法永久地添加(例如数学)库?谢谢
https://stackoverflow.com/questions/14500830
复制相似问题