sundials Win64编译

1. 系统必须安装visual studio 2010 win64编译器,编译器路径为

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\cl.exe

2. 安装64位cmake

3. 设置vs 2010 win64编译器环境变量(否则cmake将使用默认编译器),运行批处理

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\vcvars64.bat

4. 打开cmake GUI. Tools-Configure,选择visual studio 2010 X64, '指定编译器路径',选择cl.exe路径
5. 设置src,build,instdir路径,取消static库生成选项,反复configure直到红色消失
6. generate. open project
7. 清空ALL_BUILD项目,重新生成
8. 清空INSTALL项目,重新生成
9. 此时应该全部生成成功,instdir文件夹下是可用的include和lib


原文地址http://www.cnblogs.com/JudeZHU/p/4801992.html

1 编译

1.1 准备

Win7 SP1 64位旗舰版。

Visual Studio 2013 SP3 win64,先安装。

SUNDIALShttp://computation.llnl.gov/casc/sundials/download/download.php

建议下载2.5.0版本(不具有ARKODE求解器),笔者测试时(2015.9.9.),用Cmake编译2.6.0时似乎有一些问题。

Cmakehttp://www.cmake.org/download/

笔者测试时(2015.9.9.),用Cmake 3.3.1

1.2 Cmake编译SUNDIALS-2.5.0

1.2.1 建立工作目录

笔者在C盘根目录建立如下路径:

即建立C:\sundials路径,并在其中分别建立三个文件夹:sundials-2.5.0-srcsundials-2.5.0-buildsundials-2.5.0-install。其中,sundials-2.5.0-src用于存放SUNDIALS解压缩文件:

sundials-2.5.0-build存放之后Cmake编译成功生成的VS工程项目文件;

sundials-2.5.0-install存放VS编译生成的函数库文件。

1.2.2 Cmake编译

打开sundials-2.5.0-srcCMakeLists.txt,找到"# Set some variables with info on the SUNDIALS project",将SUNDIALS版本号从2.4.0改为2.5.0,保存,关闭:

打开Cmake,如图

"Where is the source code:"右边"Browse Source…"单击浏览到上面建立的sundials-2.5.0-src文件夹;在"Where to build the binaries:" 右边"Browse Build…"单击浏览到上面建立的sundials-2.5.0-build文件夹。如图:

单击"Configure",弹出编译器选择界面:

选择"Visual Studio 12 2013 Win64",选取"Use default native compilers",单击"Finish",返回Cmake主界面,等待配置完成:

应该看到通知框中出现"Configuring done"字样,过程中可能出现Warning。如果出现Error,需按提示查找原因。

其中,红色表示需要确认的选择,例如是不是配置BUILD_CVODE这一项,打钩表示有选择意向,要再次单击"Configure"才能配置。在后面所讲的配置完成后,多次单击"Configure",直到所有红色消除,表示配置完成。

找到"CMAKE_INSTALL_PREFIX"一项,将其路径改为上面建立的sundials-2.5.0-install文件夹路径,即

找到"BUILD_SHARED_LIBS",勾选上;找到"BUILD_STATIC_LIBS",取消勾选。这一操作,将输出动态链接库(SHARED_LIBS.dll和其对应的.lib);而默认是只输出静态库(STATIC_LIBS.lib)。笔者选择动态链接库,主要考虑以后可能需要和其他语言混合编程,如C#等,实现SUNDIALS库计算,其他语言做GUI和图形化。

找到"EXAMPLES_ENABLE"项,勾选上。这将在sundials-2.5.0-install文件夹中输出样例C文件,便于学习和复用。

其它各选项,笔者未做测试,可以看到其中还有诸如"MPI_ENABLE"项可以设置并行计算。

配置好选择项以后,点击"Configure",两次,直到所有红色消除,如下:

配置完成,单击"Generate",开始向sundials-2.5.0-build文件夹生成按照以上配置产生的VS 2013 Win64 C语言dll工程:

大约2s,看到上图所示"Generating done"字样,生成成功。

关闭CMake

1.3 动态库生成

进到sundials-2.5.0-build文件夹,可看到生成了sundials.sln工程。

双击"sundials.sln",打开该工程,在对应的"解决方案资源管理器"中将出现相应的子工程:

其中,有三个子工程的字母全大写,分别是"ALL_BUILD""INSTALL""ZERO_CHECK"

重要:请注意所使用的编译方案,在使用编译生成的库时,需要对应相应的配置,否则将出现不能识别dll的错误。

右键单击"ALL_BUILD"工程,出现:

单击"生成",将在sundials-2.5.0-build的各自工程目录文件夹中生成相应的动态链接库,例如cvode的库,找到"C:\sundials\sundials-2.5.0-build\src\cvode\Debug"路径,如下:

看到,已经生成了sundials_cvode.dllsundials_cvode.lib。其它各库类似。

1.4 动态库安装

生成各库以后,为了便于统一调用方便,源代码提供者另外写了"INSTALL"工程,能将所有使用中需要的头文件(include)和库文件(dlllib)和案例文件(Example)复制到前面定义的sundials-2.5.0-install文件夹中。

也就是说,当"ALL_BUILD"工程被编译后,sundials-2.5.0-install文件夹仍然是空的;只有将"INSTALL"工程编译后,sundials-2.5.0-install文件夹才被写入对应内容。

右键单击"INSTALL"工程,单击"生成"。成功后,sundials-2.5.0-install文件夹中出现相应文件夹:

关闭sundials.sln工程。

打开"include" →"cvode",其中头文件如下:

其他各库的头文件存放在各自文件夹中。

打开"lib"文件夹,其中库文件如下:

各库文件的dlllib文件都存放在该路径下。

打开"examples"→" cvode"→" serial" cvode库的示例使用C文件存放在该路径,如下:

其它各库也类似。

重要:将路径"C:\sundials\sundials-2.5.0-install\include"和路径"C:\sundials\sundials-2.5.0-install\lib"添加到系统path环境变量中,完成最终安装。否则,使用过程中,将出现找不到dll的问题。

也可以通过工程的本地化配置,实现对系统对dll的寻址,参考http://blog.csdn.net/xiejiashu/article/details/43992747/

2 试用

2.1 样例模型说明

样例模型采用SUNDIALS包提供的文件"cvRoberts_dns.c",其中描述了一个三物料化学反应问题,如下方程组所示:

dy 1 dt =0.04y 1 +10 4 y 2 y 3 ,  dy1dt=−0.04y1+104y2y3,

dy 2 dt =0.04y 1 10 4 y 2 y 3 3×10 7 y 2 2 ,  dy2dt=0.04y1−104y2y3−3×107y22,

dy 3 dt =3×10 7 y 2 2 .  dy3dt=3×107y22.

其求解时域为 t[0,4×10 10 ]  t∈[0,4×1010],其初始条件为:

y 1 (0)=1.0,  y1(0)=1.0,

y 2 (0)=0.0,  y2(0)=0.0,

y 3 (0)=0.0.  y3(0)=0.0.

在求解该动态问题的同时,还会利用求根技术,找到 y 1 =10 4   y1=10−4 y 3 =0.01  y3=0.01的时间。

2.2 Console工程

2.2.1 空白工程新建

"C:\sundials"路径下,新建工程目录"SundialsWorks"

打开VS 2013,新建一个VC++Win32控制台应用程序"SundialsConsole01",位置选择路径"C:\sundials\SundialsWorks\",如下图:

单击"确定","下一步",选择"空项目""完成"

保存项目。

2.2.2 添加样例C文件

找到路径"C:\sundials\SundialsWorks\SundialsConsole01",新建"src"文件夹:

将目录"C:\sundials\sundials-2.5.0-install\examples\cvode\serial"中的文件"cvRoberts_dns.c"复制到新建的"C:\sundials\SundialsWorks\SundialsConsole01\src"路径下:

SundialsConsole01.sln工程的解决方案资源管理器中,右键"源文件"→"添加"→"现有项",如图:

浏览到"C:\sundials\SundialsWorks\SundialsConsole01\src"路径,选取文件"cvRoberts_dns.c",成功后,单击该文件:

由于此时,并未给项目选择依赖的头文件和库文件,打开的"cvRoberts_dns.c"中头文件处有下划红线。

2.2.3 配置编译参数

修改运行平台为x64,以匹配库文件:

单击"项目"→"属性"

找到"配置属性"→"C/C++"→"常规",在"附加包含目录"中添加路径:C:\sundials\sundials-2.5.0-install\include

找到"配置属性"→"链接器"→"常规",在"附加库目录"中添加路径:C:\sundials\sundials-2.5.0-install\lib

找到"配置属性"→"链接器"→"输入",在"附加依赖项"中添加:sundials_cvode.lib;sundials_nvecserial.lib(用分号隔开)

找不到以上各项,可以先调试(F5)一次,出错后,将能看到以上完整项目录树。

2.2.4 编译生成结果

完成后,回到main文件,在main函数的"return(0);"(约197行)前添加"getchar();"函数,防止生成的Console窗口一闪而过。

执行调试(F5),将弹出执行结果:

如出错,最可能是找不到"sundials_cvode.dll""sundials_nvecserial.dll",可关闭SundialsConsole01.sln工程,再打开调试。

2.2.5 重要注意

如仍然出错,请按照上述诸过程进行检查。一般问题可能出在:

1)没将"C:\sundials\sundials-2.5.0-install\include"和路径"C:\sundials\sundials-2.5.0-install\lib"添加到系统path环境变量中,或没将工程本地化配置,实现对系统对dll的寻址,参考http://blog.csdn.net/xiejiashu/article/details/43992747/

2"项目"→"属性""C/C++""链接器"各项配置未完成;

3)运行平台没有与库文件的生成平台匹配,如库文件选择了x64,而应用工程选用win32. 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值