链接SuiteSparse的libldl有什么问题?

时间:2015-11-07 14:58:00

标签: c++ gcc linker static-libraries static-linking

我正在尝试使用g ++(GCC版本4.8.3)编译这个简单(无用)的C ++程序,并且在从SuiteSparse链接库时遇到问题:

#include "ldl.h"

int main() {
  int a = 3;
  ldl_symbolic(a, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
  return 0;
}

当我启动时

g++ -c -I<path>/LDL/Include -I<path>/SuiteSparse_config main.cpp
g++ -L<path>/LDL/Lib main.o -lldl

如果链接我使用gcc而不是g ++:

,也会发生同样的情况
gcc -L<path>/LDL/Lib main.o -lldl

我收到此错误:

main.o: In function `main':
main.cpp:(.text+0x4a): undefined reference to `ldl_symbolic(int, int*, int*, int*, int*, int*, int*, int*, int*)'
collect2: error: ld returned 1 exit status

但如果我用nm检查libldl.a,它看起来像静态库中的符号:

ldl.o:
                 U _GLOBAL_OFFSET_TABLE_
0000000000000560 T ldl_dsolve
00000000000004e0 T ldl_lsolve
0000000000000610 T ldl_ltsolve
0000000000000180 T ldl_numeric
00000000000006a0 T ldl_perm
00000000000006d0 T ldl_permt
0000000000000000 T ldl_symbolic
00000000000007b0 T ldl_valid_matrix
0000000000000700 T ldl_valid_perm
                 U memset

ldll.o:
                 U _GLOBAL_OFFSET_TABLE_
0000000000000480 T ldl_l_dsolve
0000000000000420 T ldl_l_lsolve
0000000000000530 T ldl_l_ltsolve
0000000000000160 T ldl_l_numeric
00000000000005b0 T ldl_l_perm
00000000000005e0 T ldl_l_permt
0000000000000000 T ldl_l_symbolic
00000000000006c0 T ldl_l_valid_matrix
0000000000000610 T ldl_l_valid_perm
                 U memset

有关何时可能出现此类问题的任何想法?

0 个答案:

没有答案