Visual Studio 2008编译机器学习算法库Shark
2015-04-01 10:49
405 查看
Shark是一个快速、模块化、功能丰富且开源的C++机器学习库。它实现了线性和非线性优化、基于核函数的学习算法、神经网络等多种机器学习算法。Shark依赖于CMake和Boost,与Windows、Solaris、MacOS X和Linux兼容。当前最新的官方版本为Shark 3.0,可以从该项目的SVN上获取源码(点击打开链接)
本文描述了Windows 7(64位)上基于Visual Studio 2008编译Shark 3.0源码并安装的完整过程,同时对安装过程中产生的问题进行说明。该过程依赖于CMake 3.2.1(点击打开链接)和Boost
1.57.0(点击打开链接)。
首先利用Visual Studio 2008中编译安装Boost。打开Visual Studio Tools目录下的Visual Studio 2008 Command Prompt,进入Boost所在目录(这里为D:\code\boost_1_57_0),输入以下命令:
运行结果如下图所示:
booststrap会在当前目录中生成b2.exe和bjam.exe,如下图所示。b2是整个Boost.Build构建系统的引擎,在Boost的早期版本中,该功能由bjam实现;从Boost 1.47.0开始,官方将bjam改名为b2,考虑到兼容问题,仍然保留了bjam。
在当前目录中执行以下命令:
其中,参数“--build-type=complete”使得Boost.Build建立库所支持的所有版本;“--toolset=msvc-9.0”表示用于编译Boost的工具集是msvc 9.0工具集,该工具集对应于Visual Studio 2008。“--layout=versioned”表示Boost.Build生成的库文件名应当包含Boost版本号,编译器名称及版本号,以及一些其他的构建属性;“--prefix=C:\Program
Files\boost_1_57_0”指定了Boost头文件及生成库的存放目录;“--without-mpi”要求Boost.Build不构建MPI库(Message Passing Interface,一种用于在高性能并行计算中进行消息传递的库。在某些版本的Boost中,生成MPI库可能会出现“dumplicate name”错误)。上述过程完成后(大约30分钟,具体时间因机器而异),将在指定目录(此处为C:\Program Files\boost_1_57_0)中生成include和lib两个目录,至此完成boost的编译和构建,接下来的过程为Shark的编译和构建。
然后打开CMake,将源码目录和构建目录均设为Shark根目录(此处为D:\code\Shark),如下图所示:
点击“Add Entry”为CMake设置缓存条目(也可以用命令行方式进行,具体可参考CMake官方文档)。首先添加BOOL型参数Boost_NO_SYSTEM_PATHS,如下图所示(注意勾选Value复选框,表示将此BOOL值设置为真):
然后添加Path型参数BOOST_ROOT,该参数用于指定Boost库所在目录(此处为C:\Program Files\boost_1_57_0),如下图所示:
完成参数设置后,点击“Configure”按钮,选择构造器“Visual Studio 9 2008”,如下图所示:
完成上述配置后,Configure过程开始,该过程生成一系列configure文件。运行成功后再点击“Generate”按钮,生成相应的Visual Studio工程文件(.vcproj)和解决方案文件(.sln)。
执行Generate后,在Shark根目录下生成shark.sln文件,用Visual Studio 2008打开可以看到所有的240个工程,如下图所示:
修改include/shark/Algorithms/Trainers/RFTrainer.h文件,添加如下代码:
分别在debug和release模式下构建整个shark解决方案,忽略所有警告,即可得到相应的库文件。
在编译安装Shark的过程中可能遇到的一些错误:
1. 用CMake进行Configure的过程中,出现如下错误信息:
2. 编译链接shark.sln过程中,出现如下编译错误:
可能原因:RFTrainer.h文件未包含set头文件。
3. 编译链接shark.sln过程中,出现如下(或类似)链接错误:
可能原因:BOOST_ROOT设置错误,导致CMake无法找到Boost安装目录;执行b2时,layout参数未设置为versioned,导致生成的Boost库文件名称未包含编译器名称和版本信息。
4. 部分工程出现如下(或类似)编译错误:
可能原因:引用之引用非法。Shark 3.0中大量使用C++模板技术,时常出现双重引用的情况。可能的解决方案是利用Boost提供的Call Trait机制,将模板类中某些成员函数的参数替换为call_traits中的等价表达式,或更换至更新版本的编译器。
本文描述了Windows 7(64位)上基于Visual Studio 2008编译Shark 3.0源码并安装的完整过程,同时对安装过程中产生的问题进行说明。该过程依赖于CMake 3.2.1(点击打开链接)和Boost
1.57.0(点击打开链接)。
首先利用Visual Studio 2008中编译安装Boost。打开Visual Studio Tools目录下的Visual Studio 2008 Command Prompt,进入Boost所在目录(这里为D:\code\boost_1_57_0),输入以下命令:
bootstrap --prefix="C:\Program Files\boost_1_57_0"
运行结果如下图所示:
booststrap会在当前目录中生成b2.exe和bjam.exe,如下图所示。b2是整个Boost.Build构建系统的引擎,在Boost的早期版本中,该功能由bjam实现;从Boost 1.47.0开始,官方将bjam改名为b2,考虑到兼容问题,仍然保留了bjam。
在当前目录中执行以下命令:
b2 --build-type=complete --toolset=msvc-9.0 --layout=versioned --prefix="C:\Program Files\boost_1_57_0" --without-mpi install
其中,参数“--build-type=complete”使得Boost.Build建立库所支持的所有版本;“--toolset=msvc-9.0”表示用于编译Boost的工具集是msvc 9.0工具集,该工具集对应于Visual Studio 2008。“--layout=versioned”表示Boost.Build生成的库文件名应当包含Boost版本号,编译器名称及版本号,以及一些其他的构建属性;“--prefix=C:\Program
Files\boost_1_57_0”指定了Boost头文件及生成库的存放目录;“--without-mpi”要求Boost.Build不构建MPI库(Message Passing Interface,一种用于在高性能并行计算中进行消息传递的库。在某些版本的Boost中,生成MPI库可能会出现“dumplicate name”错误)。上述过程完成后(大约30分钟,具体时间因机器而异),将在指定目录(此处为C:\Program Files\boost_1_57_0)中生成include和lib两个目录,至此完成boost的编译和构建,接下来的过程为Shark的编译和构建。
然后打开CMake,将源码目录和构建目录均设为Shark根目录(此处为D:\code\Shark),如下图所示:
点击“Add Entry”为CMake设置缓存条目(也可以用命令行方式进行,具体可参考CMake官方文档)。首先添加BOOL型参数Boost_NO_SYSTEM_PATHS,如下图所示(注意勾选Value复选框,表示将此BOOL值设置为真):
然后添加Path型参数BOOST_ROOT,该参数用于指定Boost库所在目录(此处为C:\Program Files\boost_1_57_0),如下图所示:
完成参数设置后,点击“Configure”按钮,选择构造器“Visual Studio 9 2008”,如下图所示:
完成上述配置后,Configure过程开始,该过程生成一系列configure文件。运行成功后再点击“Generate”按钮,生成相应的Visual Studio工程文件(.vcproj)和解决方案文件(.sln)。
执行Generate后,在Shark根目录下生成shark.sln文件,用Visual Studio 2008打开可以看到所有的240个工程,如下图所示:
修改include/shark/Algorithms/Trainers/RFTrainer.h文件,添加如下代码:
#include <set>
分别在debug和release模式下构建整个shark解决方案,忽略所有警告,即可得到相应的库文件。
在编译安装Shark的过程中可能遇到的一些错误:
1. 用CMake进行Configure的过程中,出现如下错误信息:
CMake Error at C:/Program Files (x86)/CMake/share/cmake-3.2/Modules/FindBoost.cmake:1182 (message): Unable to find the requested Boost libraries. Boost version: 1.57.0 Boost include path: C:/Program Files/boost_1_57_0/include/boost-1_57 Could not find the following static Boost libraries: boost_system boost_date_time boost_filesystem boost_program_options boost_serialization boost_thread boost_unit_test_framework No Boost libraries were found. You may need to set BOOST_LIBRARYDIR to the directory containing Boost libraries or BOOST_ROOT to the location of Boost. Call Stack (most recent call first): CMakeLists.txt:168 (FIND_PACKAGE)可能原因:BOOST_ROOT设置错误,导致CMake无法找到Boost安装目录;执行b2时,工具集未选择或选择错误,导致生成的Boost库文件名称未包含或错误地包含了编译器名称和版本信息。
2. 编译链接shark.sln过程中,出现如下编译错误:
Shark\include\shark/Algorithms/Trainers/RFTrainer.h(168) : error C2976: 'std::set' : too few template arguments
可能原因:RFTrainer.h文件未包含set头文件。
3. 编译链接shark.sln过程中,出现如下(或类似)链接错误:
LINK : fatal error LNK1104: cannot open file 'libboost_serialization-vc90-mt-gd-1_57.lib'
可能原因:BOOST_ROOT设置错误,导致CMake无法找到Boost安装目录;执行b2时,layout参数未设置为versioned,导致生成的Boost库文件名称未包含编译器名称和版本信息。
4. 部分工程出现如下(或类似)编译错误:
Shark\include\shark/Models/Kernels/MultiTaskKernel.h(100) : error C2529: 'abstract declarator' : reference to reference is illegal
可能原因:引用之引用非法。Shark 3.0中大量使用C++模板技术,时常出现双重引用的情况。可能的解决方案是利用Boost提供的Call Trait机制,将模板类中某些成员函数的参数替换为call_traits中的等价表达式,或更换至更新版本的编译器。
相关文章推荐
- 转: Visual Studio 2008编译机器学习算法库Shark
- 用Visual studio 2008编译安装Qt4.5.0
- Visual Studio 2008 编译程序时的 mt.exe 返回错误
- Visual Studio 2008 + Visual Assist X的CUDA2.3编译环境设置(转)
- Visual Studio 2008编译多平台切换时出现的编译问题解决记录
- windows 下编译 Boost 1.50 + Visual Studio 2008
- Visual Studio 2008 (VC++9) 编译 mariadb 5.5.28a
- [图]Visual Studio 2008 RTM 已经编译完毕,内部人员已可使用
- visual studio 2008编译的C++程序在没安装redistribute包或vs的机器上无法运行
- 在Visual Studio 2008中编译snort-2.8.6.1.tar.gz
- 扫盲贴 Visual Studio 2005/2008中如何编译和运行C++程序
- Visual Studio 2005/2008中如何编译和运行C++程序
- ZLib库 -- Visual Studio 2008编译ZLib库
- 解决Visual Studio 2008编译智能设备程序时找不到头文件的方法
- Visual Studio 2008 + Assist 的CUDA2.2编译环境设置
- Visual Studio 2008 RTM 已经编译完毕,内部人员已可使用
- visual studio 2005 & visual studio 2008下编译boost库
- Visual Studio 2008的Vmware插件导致Visual Studio编译出错并异常退出的问题
- boost 1.35.0 Visual Studio 2008编译指南
- 如何使用Visual Studio 2008编译C语言