【发布时间】:2014-12-30 16:36:04
【问题描述】:
我需要使用 GSL(GNU 科学库)编写一些 C 代码,之前从未使用过库。
我是一名物理学家,而不是计算机科学家,并且对 GNU 文档中的许多术语感到困惑。
在过去的几个小时里,我一直对如何在 Windows 7 机器上使用 GSL 感到非常困惑。我已经尝试在这个网站以及其他网站上阅读很多问题,但是很多行话都在我脑海中浮现。
通常,当我编写程序时,我会执行以下步骤:
-
打开记事本++,包含我自己的任何头文件并编写我的代码。
-
通过打开 Windows 命令提示符并键入来编译我的程序:
gcc -Wall -std=c99 -o myfile myfile.c
我将 gcc 设置为环境变量,并通过为 Windows 安装 CodeBlocks 来安装 gcc(但是,我不使用代码块)。
如何安装 GSL:
-
从 http://gnuwin32.sourceforge.net/packages/gsl.htm 下载了适用于 Windows 的 GSL
-
将它安装在桌面上,这样我的路径就没有空格字符(我读过路径中的空格可能是个问题)。
-
将我的路径环境变量设置为 .dll 的位置:
C:\Users\Rohan\Desktop\GnuWin32\bin; -
尝试编译 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.dll和libgslcblas.dll,在本例中是桌面。我觉得这很奇怪,因为在我的环境变量中的 PATH 中的 bin 文件夹(已经记录了 dll 的位置)。