Visual Stdio C++ 编译器 编译 (GSL) GNU Scientific Library 的方法介绍(2)
2016-08-27 10:06
525 查看
编译好的版本放到了这里,包括静态库和动态库。大家直接用吧。
http://download.csdn.net/detail/liyuanbhu/9618257
今天继续介绍如何生成 gsl 的其他部分。
gsl 是一个比较大的库,直接将 gsl 的全部内容打包成一个库文件虽然是可行的,但是会很麻烦。因为,gsl 不同模块有许多相同名字的源文件。比如 vector 目录下有 oper.c ,matrix 目录下也有 oper.c。这两个 oper.c 都会编译为 oper.obj ,而且放置在同一个目录下,结果就是互相覆盖。为了解决这个问题,我们就不得不修改文件名。类似这样需要修改的地方有几十处,改起来很麻烦。所以我就选了另一种方式。
按模块编译,生成一系列的静态库,比如 gsl_vector.lib、gsl_matrix.lib 等等。
之后再将这些小的静态库打包为一个 gsl.lib。
有了 gsl.lib 还可以生成 gsl.dll。
下面的顺序与 gsl ref 中对各个模块介绍的顺序是相同的。
建立一个新目录:gsl 作为我们项目路径。下面的子目录如下:
这里可以将上一篇博客建立的目录改个名,include 目录里面的文件全都保留。
sys 目录拷贝到 source 中。
gsl_mode.h 拷贝到 include\gsl 中。
build.h 拷贝到 include 中。
项目文件如下:
编译就可以生成 gsl_sys.lib 了。
下面的代码片段可以简单的测试生成的 gsl_sys.lib 是否工作正常。
gsl_complex_math.h 和 gsl_complex.h 拷贝到 include\gsl 目录中。
项目文件如下:
测试代码如下:
项目文件如下:
测试代码如下:
编译这个测试代码时会报错。提示 gsl_error 没找到。 gsl_error 是在 gsl_err 模块中的,我们还没有编译,所以肯定是找不到的。下面就来生成 gsl_err 模块。
项目文件如下:
有了gsl_err.lib 后,就可以测试 gsl_poly 模块了。我这里的输出结果如下,与 gsl ref 上的输出略有差异,但是也是正确的。
这几个模块都是比较容易的。基本上把代码添加进来就可以编译通过。下篇博客介绍编译时会报错的几个模块。
http://download.csdn.net/detail/liyuanbhu/9618257
Visual Stdio C++ 编译器 编译 (GSL) GNU Scientific Library 的方法介绍(2)
上一篇博客中介绍了如何生成 gslcblas.lib 和 gslcblas.dll。今天继续介绍如何生成 gsl 的其他部分。
gsl 是一个比较大的库,直接将 gsl 的全部内容打包成一个库文件虽然是可行的,但是会很麻烦。因为,gsl 不同模块有许多相同名字的源文件。比如 vector 目录下有 oper.c ,matrix 目录下也有 oper.c。这两个 oper.c 都会编译为 oper.obj ,而且放置在同一个目录下,结果就是互相覆盖。为了解决这个问题,我们就不得不修改文件名。类似这样需要修改的地方有几十处,改起来很麻烦。所以我就选了另一种方式。
按模块编译,生成一系列的静态库,比如 gsl_vector.lib、gsl_matrix.lib 等等。
之后再将这些小的静态库打包为一个 gsl.lib。
有了 gsl.lib 还可以生成 gsl.dll。
下面的顺序与 gsl ref 中对各个模块介绍的顺序是相同的。
建立一个新目录:gsl 作为我们项目路径。下面的子目录如下:
gsl --include ----gsl --source
这里可以将上一篇博客建立的目录改个名,include 目录里面的文件全都保留。
gsl_sys 模块
这个模块主要是提供一些辅助函数:gsl_isnan、gsl_isinf、gsl_finite 等。sys 目录拷贝到 source 中。
gsl_mode.h 拷贝到 include\gsl 中。
build.h 拷贝到 include 中。
项目文件如下:
#------------------------------------------------- # # Project created by QtCreator 2016-08-26T20:38:46 # #------------------------------------------------- QT -= core gui TARGET = gsl_sys TEMPLATE = lib CONFIG += staticlib INCLUDEPATH += ./include/ SOURCES += \ source/sys/coerce.c \ source/sys/expm1.c \ source/sys/fcmp.c \ source/sys/fdiv.c \ source/sys/hypot.c \ source/sys/infnan.c \ source/sys/invhyp.c \ source/sys/ldfrexp.c \ source/sys/log1p.c \ source/sys/minmax.c \ source/sys/pow_int.c \ source/sys/prec.c unix { target.path = /usr/lib INSTALLS += target } DISTFILES +=
编译就可以生成 gsl_sys.lib 了。
下面的代码片段可以简单的测试生成的 gsl_sys.lib 是否工作正常。
#include <gsl/gsl_math.h> #define HAVE_INLINE void sys_test() { double y = gsl_pow_4 (3.141); printf("%f\n", y); y = gsl_log1p(0.1); printf("%f\n", y); int a = GSL_IS_ODD (11); printf("%d\n", a); a = gsl_isnan(GSL_NAN); printf("%d\n", a); }
gsl_complex 模块
这个模块提供对复数运算的支持。对应 gsl ref 上的第五章。gsl_complex_math.h 和 gsl_complex.h 拷贝到 include\gsl 目录中。
项目文件如下:
#------------------------------------------------- # # Project created by QtCreator 2016-08-26T20:38:46 # #------------------------------------------------- QT -= core gui TARGET = gsl_complex TEMPLATE = lib CONFIG += staticlib INCLUDEPATH += ./include/ SOURCES += \ source/complex/math.c \ source/complex/inline.c unix { target.path = /usr/lib INSTALLS += target } DISTFILES +=
测试代码如下:
#include <gsl/gsl_complex.h> #include <gsl/gsl_complex_math.h> void complex_test() { double r = 10; double t = 0.5 ; double x = r * cos(t), y = r * sin(t) ; gsl_complex z = gsl_complex_polar (r, t) ; printf("%f, %f\n", GSL_REAL(z),GSL_IMAG(z) ); printf("%f, %f\n", x, y ); }
gsl_poly 模块
gsl_errno.h 和 gsl_poly.h 拷贝到 include/gsl项目文件如下:
#------------------------------------------------- # # Project created by QtCreator 2016-08-26T20:38:46 # #------------------------------------------------- QT -= core gui TARGET = gsl_poly TEMPLATE = lib CONFIG += staticlib INCLUDEPATH += ./include/ SOURCES += \ source/poly/dd.c \ source/poly/deriv.c \ source/poly/eval.c \ source/poly/solve_cubic.c \ source/poly/solve_quadratic.c \ source/poly/zsolve.c \ source/poly/zsolve_cubic.c \ source/poly/zsolve_init.c \ source/poly/zsolve_quadratic.c unix { target.path = /usr/lib INSTALLS += target } DISTFILES +=
测试代码如下:
#include <gsl/gsl_poly.h> void poly_test() { int i; /* coefficients of P(x) = -1 + x^5 */ double a[6] = { -1, 0, 0, 0, 0, 1 }; double z[10]; gsl_poly_complex_workspace * w = gsl_poly_complex_workspace_alloc (6); gsl_poly_complex_solve (a, 6, w, z); gsl_poly_complex_workspace_free (w); for (i = 0; i < 5; i++) { printf ("z%d = %+.18f %+.18f\n", i, z[2*i], z[2*i+1]); } }
编译这个测试代码时会报错。提示 gsl_error 没找到。 gsl_error 是在 gsl_err 模块中的,我们还没有编译,所以肯定是找不到的。下面就来生成 gsl_err 模块。
gsl_err 模块
gsl_message.h 和 gsl_error.h 拷贝到 include/gsl 目录中。项目文件如下:
#------------------------------------------------- # # Project created by QtCreator 2016-08-26T20:38:46 # #------------------------------------------------- QT -= core gui TARGET = gsl_err TEMPLATE = lib CONFIG += staticlib INCLUDEPATH += ./include/ SOURCES += \ source/err/error.c \ source/err/message.c \ source/err/stream.c \ source/err/strerror.c unix { target.path = /usr/lib INSTALLS += target } DISTFILES +=
有了gsl_err.lib 后,就可以测试 gsl_poly 模块了。我这里的输出结果如下,与 gsl ref 上的输出略有差异,但是也是正确的。
z0 = -0.809016994374947670 +0.587785252292473360 z1 = -0.809016994374947670 -0.587785252292473360 z2 = +0.309016994374947510 +0.951056516295152980 z3 = +0.309016994374947510 -0.951056516295152980 z4 = +0.999999999999999890 +0.000000000000000000
这几个模块都是比较容易的。基本上把代码添加进来就可以编译通过。下篇博客介绍编译时会报错的几个模块。
相关文章推荐
- Visual Stdio C++ 编译器 编译 (GSL) GNU Scientific Library 的方法介绍(7)
- Visual Stdio C++ 编译器 编译 (GSL) GNU Scientific Library 的方法介绍(8)
- Visual Stdio C++ 编译器 编译 (GSL) GNU Scientific Library 的方法介绍(8)
- Visual Stdio C++ 编译器 编译 (GSL) GNU Scientific Library 的方法介绍(3)
- Visual Stdio C++ 编译器 编译 (GSL) GNU Scientific Library 的方法介绍(1)
- Visual Stdio C++ 编译器 编译 (GSL) GNU Scientific Library 的方法介绍(3)
- Visual Stdio C++ 编译器 编译 (GSL) GNU Scientific Library 的方法介绍(4)
- Visual Stdio C++ 编译器 编译 (GSL) GNU Scientific Library 的方法介绍(5)
- Visual Stdio C++ 编译器 编译 (GSL) GNU Scientific Library 的方法介绍(7)
- Visual Stdio C++ 编译器 编译 (GSL) GNU Scientific Library 的方法介绍(1)
- Visual Stdio C++ 编译器 编译 (GSL) GNU Scientific Library 的方法介绍(4)
- Visual Stdio C++ 编译器 编译 (GSL) GNU Scientific Library 的方法介绍(6)
- Visual Stdio C++ 编译器 编译 (GSL) GNU Scientific Library 的方法介绍(2)
- Visual Stdio C++ 编译器 编译 (GSL) GNU Scientific Library 的方法介绍(5)
- Visual Stdio C++ 编译器 编译 (GSL) GNU Scientific Library 的方法介绍(6)
- Windows下使用VC++编译GNU科学计算库 GNU Scientific Library(GSL)
- 在Visual Studio 2013中编译GNU Scientific Library (GSL) v1.16
- Windows下使用VC++编译GNU科学计算库 GNU Scientific Library(GSL)
- Windows下使用VC++编译GNU科学计算库 GNU Scientific Library(GSL)
- C/C++ GNU Scientific Library(GSL) for Windows