无法与GSL链接

时间:2018-05-31 14:37:40

标签: gcc linker gsl

我无法将我的程序与GSL联系起来。编译命令为:gcc -lgsl -lgslcblas -lm -o exe t.o。报告的错误为undefined reference to 'gsl_ran_pareto'

但是,当我检查libgsl的符号时,会出现gsl_ran_pareto

$nm -D /usr/lib/x86_64-linux-gnu/libgsl.so | grep gsl_ran_pareto
000000000011e980 T gsl_ran_pareto
000000000011e9d0 T gsl_ran_pareto_pdf

我尝试链接静态GSL库(添加-static)并且它有同样的问题:链接器报告undefined referencenm /usr/lib/x86_64-linux-gnu/libgsl.a找到此符号。 我也尝试将库复制到本地文件夹并直接链接 - 仍然是同样的问题。

更多信息(测试程序t.c的代码,t.o的符号列表,libgsl-dev包正确安装)。

$cat t.c
#include <gsl/gsl_math.h>
#include <gsl/gsl_randist.h>
#include <gsl/gsl_rng.h>
int main(){
    gsl_ran_pareto(NULL, 1, 1); 
    return 0; 
}

$ nm t.o 
                 U gsl_ran_pareto
0000000000000000 T main

$ dpkg -s libgsl-dev
Package: libgsl-dev
Status: install ok installed
...

操作系统:Ubuntu 16.04

知道如何进一步调查吗?链接器正确地找到库(否则会抱怨),并且库包含缺少的符号。那么什么可能出错? 谢谢!

1 个答案:

答案 0 :(得分:0)

显然,我以错误的顺序安排了链接器标志。动态库标志必须出现在目标文件之后。 以下链接命令有效:gcc -o exe t.c -lgsl -lgslcblas -lm

更多信息:Why does the order in which libraries are linked sometimes cause errors in GCC?