当文件使用GSL函数时,在VS Code中从c++文件打印时会出现问题



我正在尝试使用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.dlllibgslcblas.dll

解决方案:

  • <gsl-path>gslbin路径添加到PATH环境变量
  • 重启所有终端

下面是我找到问题所在的步骤:

  • 我用32位的gcc/GSL(从这里安装)和64位的gcc/GSL(用vcpkg安装)编译了源代码。
  • 我在WSL中运行可执行文件,它给了我一个错误"libgsl.dll not found"
  • 我将<gsl-path> gslbin中的libgsl.dlllibgslblas.dll文件放在。exe的同一目录中,它工作了
  • 我检查了如果我没有将gslbin文件夹添加到PATH环境变量
  • 它已经被添加,所以我不得不重新启动所有终端使其工作。

我希望这对你有帮助。

最新更新