我正在尝试使用GSL函数在c++中运行示例脚本。我正在使用Visual Studio代码来编译和执行程序。示例代码如下(我将其保存在文件名gsl_bessel_example.cpp下),我直接从这里的GSL 2.7科学库文档中获得了它。
#include <stdio.h>
#include <gslgsl_sf_bessel.h>
int
main (void)
{
double x = 5.0;
double y = gsl_sf_bessel_J0 (x);
//double y = 10.0;
printf ("J0(%g) = %.18en", x, y);
return 0;
}
在我编译并执行程序后,我希望程序向终端输出以下内容:
J0(5) = -1.775967713143382642e-01
当我编译程序时,我在命令行中使用以下命令:
g++ -Wall gsl_bessel_example.cpp -IC:msys64mingwinclude -LC:msys64mingwlib -lgsl -lgslcblas
,并使用:
.a.exe
当我编译文件时,没有错误或警告——它编译得很好。然而,当我执行它时,我没有得到任何输出。如果我注释掉这行:
double y = gsl_sf_bessel_J0 (x);
和使用:
double y = 10;
然后重新编译并执行,我收到了预期的输出(请参阅附件中的结果图像)。有人知道为什么当我使用GSL函数时,文件不会按预期执行吗?我已经尝试了GSL文档中提供的其他示例,但对所有示例都有类似的结果(没有输出)。
使用GSL函数的代码和输出图像
未使用GSL函数的代码和输出图像
这个答案可能有点晚了,但我遇到了同样的问题,我想我应该分享我的解决方案。
问题:编译后的二进制文件找不到链接的libgsl.dll
和libgslcblas.dll
库
解决方案:
- 将
<gsl-path>gslbin
路径添加到PATH
环境变量 - 重启所有终端
下面是我找到问题所在的步骤:
- 我用32位的gcc/GSL(从这里安装)和64位的gcc/GSL(用vcpkg安装)编译了源代码。
- 我在WSL中运行可执行文件,它给了我一个错误"libgsl.dll not found"
- 我将
<gsl-path> gslbin
中的libgsl.dll
和libgslblas.dll
文件放在。exe的同一目录中,它工作了 - 我检查了如果我没有将
gslbin
文件夹添加到PATH
环境变量 - 它已经被添加,所以我不得不重新启动所有终端使其工作。
我希望这对你有帮助。