我正在尝试使用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
有关何时可能出现此类问题的任何想法?