gpt4 book ai didi

c++ - g++ 无法链接 libgsl

转载 作者:可可西里 更新时间:2023-11-01 17:38:10 30 4
gpt4 key购买 nike

我尝试在一个项目中使用gsl库,但是我无法从gsl网站上获取示例程序正常运行。源代码和所有命令都取自网站:https://www.gnu.org/software/gsl/manual/html_node/Using-the-library.html#Using-the-library

程序如下(test.cpp):

#include <stdio.h>
#include <gsl/gsl_sf_bessel.h>

int main (void) {
double x = 5.0;
double y = gsl_sf_bessel_J0 (x);
printf ("J0(%g) = %.18e\n", x, y);
return 0;
}

然后我先编译没有错误。但是链接失败:

$ g++ -Wall -I/usr/include/ -c test.cpp
$ g++ -L/usr/lib/ -lgsl -lgslcblas -lm test.o
test.o: In function `main':
test.cpp:(.text+0x1c): undefined reference to `gsl_sf_bessel_J0'
collect2: ld returned 1 exit status

但是库是可用的:

$ ll /usr/lib/libgsl*
lrwxrwxrwx 1 root root 16 Mar 2 2012 /usr/lib/libgsl.so.0 -> libgsl.so.0.16.0
lrwxrwxrwx 1 root root 16 Mar 2 2012 /usr/lib/libgsl.so -> libgsl.so.0.16.0
lrwxrwxrwx 1 root root 20 Mar 2 2012 /usr/lib/libgslcblas.so.0 -> libgslcblas.so.0.0.0
lrwxrwxrwx 1 root root 20 Mar 2 2012 /usr/lib/libgslcblas.so -> libgslcblas.so.0.0.0
-rw-r--r-- 1 root root 2.3M Mar 2 2012 /usr/lib/libgsl.so.0.16.0
-rw-r--r-- 1 root root 274K Mar 2 2012 /usr/lib/libgslcblas.so.0.0.0
-rw-r--r-- 1 root root 503K Mar 2 2012 /usr/lib/libgslcblas.a
-rw-r--r-- 1 root root 4.3M Mar 2 2012 /usr/lib/libgsl.a

以及头文件:

$ whereis gsl
gsl: /usr/include/gsl /usr/share/man/man3/gsl.3.gz

我也尝试过手动下载和安装库,但没有区别(这是 12.04 LTS 的 Ubuntu 包)。

/编辑2:

使用 nm 它不会给出任何进一步的提示:

$ nm /usr/lib/libgsl.a
[...]
bessel_J0.o:
00000000000004c0 T gsl_sf_bessel_J0
0000000000000000 T gsl_sf_bessel_J0_e
U gsl_sf_bessel_cos_pi4_e
[...]

最佳答案

简单修复:

你必须链接如下

 g++ -L/usr/local/lib/ test.o -lgsl -lgslcblas -lm

您在链接时颠倒了顺序(首先是 .o 文件,然后是 -l 标志)

PS:我可以用你的原件重现你的问题

 g++ -L/usr/local/lib/ -lgsl -lgslcblas -lm test.o 

而且我一直使用 gsl 而没有链接问题。我按照之前所说的颠倒顺序来修复。

PS2:enter image description here看图

关于c++ - g++ 无法链接 libgsl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18588607/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com