在Windows平台上编译GSL主要使用MinGW和MSYS这两个工具,
(1)下载安装 MinGW(安装时选择gcc,g++和Make这三项)
(2)下载安装 MSYS
(3)下载MinGW Utilities 解压复制到MSYS安装目录
(4)下载解压gsl源码,
(5)进入gsl目录,执行命令:
./configure
make
make install
(6)完成编译之后,在MSYS安装目录下的
local/bin有编译了的gsl动态库文件libgsl-0.dll libgslcblas-0.dll
local/lib有编译好了的静态库文件libgsl.a libgsl.dll.a libgslcblas.a libgslcblas.dll.a
local/include有编程需要的gsl头文件
(7)此时你会发现,编译的结果缺少lib文件,现在我们来生成lib文件
cd /usr/local/bin
pexports libgsl-0.dll >libgsl-0.def
pexports libgslcblas-0.dll >libgslcblas-0.def
这时候就生产了两个def文件
(8)使用VC6或以上版本的lib命令,生成lib文件,具体如下:
lib /machine:i386 /def:libgsl-0.def
lib /machine:i386 /def:libgslcblas-0.def
(9)动态链接库拷贝到系统的Windows文件夹下面;
将gsl头文件(local/include里面的gsl目录)拷贝到include文件夹下面;
lib文件和*.a文件(local/lib下面)放到Lib文件夹下面,
编译器tools-options-directories添加Lib路径和Include路径
最后一步就是在VC6的工程设置中的object/library modules里面添加以下内容:
libgslcblas-0.lib libgsl-0.lib
至此,整个gsl的移植工作就完成了。
gnu有一个数学的开源库,叫gsl,里面有积分函数,可以直接调用。也可以自己根据积分的原理,取小步长,计算步长和曲线函数值
间矩形的面积,所有面积的总和即是最终面积。
#include <stdio.h>#include <stdlib.h>
struct readfile
{
int n
struct readfile *next
}
int main()
{
FILE *fp
struct readfile *head, *q, *p
int m = 0,i
struct readfile k[5]
fp = fopen ("file.dat", "wb")
if (fp == NULL)
{
printf ("文件打开失败!\n")
exit (-1)
}
for (i=0 i<5 i++)
scanf ("%d", &k[i])
for (i=0 i<5 i++)
if (fwrite (&k[i], sizeof (struct readfile), 1, fp)!=1) //将数据写入文件
{
if (!feof(fp))
{
printf ("文件写入失败!\n")
exit (0)
}
}
fclose (fp)
if ((fp = fopen ("file.dat", "rb")) == NULL)
{
printf ("文件打开失败!\n")
exit (1)
}
p = q = (struct readfile*) malloc (sizeof(struct readfile))//分配空间创建链表
if (fread (&p->n, sizeof(struct readfile), 1, fp)!=1) //从文件读取一个数据到链表结点
{
if (!feof(fp))
{
printf ("文件读取失败!\n")
exit (2)
}
}
head = NULL
while (i-- && i>=0) //创建链表
{
m++
if (m == 1)
head = p
else
q->next = p
q = p
p = (struct readfile*) malloc (sizeof(struct readfile))
fread (&p->n, sizeof(struct readfile), 1, fp)//从文件读取数据到链表结点
}
q->next = NULL
fclose (fp) //数据已经写入到链表,可以关闭文件了
printf ("链表中的内容:\n")
while (head != NULL) //输出链表中内容,验证数据已经写入到链表
{
printf ("%d ", head->n)
head = head->next
}
printf ("数据写入链表成功\n")
return 0
}