【问题标题】:Using GSL on Windows (compiling, linking, ect). A Step by Step Guide在 Windows 上使用 GSL(编译、链接等)。分步指南
【发布时间】:2014-12-30 16:36:04
【问题描述】:

我需要使用 GSL(GNU 科学库)编写一些 C 代码,之前从未使用过库。

我是一名物理学家,而不是计算机科学家,并且对 GNU 文档中的许多术语感到困惑。

在过去的几个小时里,我一直对如何在 Windows 7 机器上使用 GSL 感到非常困惑。我已经尝试在这个网站以及其他网站上阅读很多问题,但是很多行话都在我脑海中浮现。

通常,当我编写程序时,我会执行以下步骤:

  1. 打开记事本++,包含我自己的任何头文件并编写我的代码。

  2. 通过打开 Windows 命令提示符并键入来编译我的程序:

gcc -Wall -std=c99 -o myfile myfile.c

我将 gcc 设置为环境变量,并通过为 Windows 安装 CodeBlocks 来安装 gcc(但是,我不使用代码块)。

如何安装 GSL:

  1. http://gnuwin32.sourceforge.net/packages/gsl.htm 下载了适用于 Windows 的 GSL

  2. 将它安装在桌面上,这样我的路径就没有空格字符(我读过路径中的空格可能是个问题)。

  3. 将我的路径环境变量设置为 .dll 的位置:C:\Users\Rohan\Desktop\GnuWin32\bin;

  4. 尝试编译 GSL 示例程序:

    #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;
    }
    

5.我调用编译器如下:

C:\Users\Rohan\Desktop>gcc -Wall -I"C:\Users\Rohan\Desktop\GnuWin32\include" -L"C:\Users\Rohan\Desktop\GnuWin32\lib" -lgslcblas -lgsl -lm -o test test.c

这导致以下错误消息:

C:\Users\Rohan\AppData\Local\Temp\ccW8cO7I.o:test.c:(.text+0x30): undefined reference to `gsl_sf_bessel_J0'
collect2: ld returned 1 exit status

由于没有 CS 背景,大部分工作都是在不了解的情况下完成的。

我是否走在正确的轨道上?是否有一个简单的分步指南,我可以按照非技术语言进行操作?

任何帮助将不胜感激, 谢谢!

【问题讨论】:

  • 您缺少一些 -L/directory-lgsl 类似 gcc 的标志。 gcc 的参数顺序很重要。顺便说一句,总是将-Wall -Wextra -g 传递给gcc;而这一切在 Linux 机器上可能会稍微容易一些。
  • 也可以使用一些版本控制系统,比如git
  • 正如@BasileStarynkevitch 建议的那样,将test.c 放在命令行上的所有其他内容之前。应该在使用其中符号的事物之后指定库。
  • @PaulGriffiths 辉煌。非常感谢 - 现在工作正常。我不太明白 Basile 指的是什么。我能问一下您为什么将此作为评论而不是答案吗?
  • 我还需要在我正在编译的位置有libgsl.dlllibgslcblas.dll,在本例中是桌面。我觉得这很奇怪,因为在我的环境变量中的 PATH 中的 bin 文件夹(已经记录了 dll 的位置)。

标签: c windows gcc linker gsl


【解决方案1】:

您需要将test.c 放在库之前。库应该在命令行中使用符号的东西后面指定,所以改为:

gcc test.c -Wall -I"C:\Users\Rohan\Desktop\GnuWin32\include" -L"C:\Users\Rohan\Desktop\GnuWin32\lib" -lgslcblas -lgsl -lm -o test

    ^^^^^^  (put this first)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-18
    相关资源
    最近更新 更多