首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法与GSL链接

无法与GSL链接
EN

Stack Overflow用户
提问于 2018-05-31 22:37:40
回答 1查看 547关注 0票数 1

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

但是当我检查libgsl的符号时,gsl_ran_pareto确实出现了:

代码语言:javascript
复制
$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 reference,但nm /usr/lib/x86_64-linux-gnu/libgsl.a发现了这个符号。我还尝试将库直接复制到本地文件夹和链接--仍然存在同样的问题。

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

代码语言:javascript
复制
$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

你知道如何进一步调查吗?链接器正确地找到了该库(否则它会报错),并且该库包含缺失的符号。那么会出什么问题呢?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-06-01 20:10:43

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50626869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档