本人知道shark在安装时会有很多困难, 所以我尽全力分享自己的经验和尝试, 希望能帮到大家!
配置 shark 3.0+Windows 10+VS 2017+boost 1.73.0+cmake 3.18.0-win64-x64
上面这个配置是本人尝试成功的配置, 曾经尝试替换boost 1.73为 1.59 结果在cmake部分失败,无法configure成功.
上述环境中, boost和cmake均是目前最新版本(2020/6/23), 可以放心食用.
按照顺序来 我们先编译boost库, 随后下载cmake, 生成shark项目, 最后编译项目, 同时在其它项目中调用shark库.
boost库编译
之前提到了, boost 1.73.0是我用的版本, 下载得到一个压缩包解压得到下图
![](https://img.haomeiwen.com/i11492843/68a882b70796fb5d.png)
打开本地网页, 然后界面如下
![](https://img.haomeiwen.com/i11492843/3d5924e275c3887e.png)
点击getting start后跳转到相关说明的网页.
后续说明的内容总结起来就是, 一部分boost模块只需要引用头文件就可以, 另一部分你需要编译出静态库.(这不意味着你有概率不需要编译, 请不要心存侥幸)
编译过程很简单, 我按照下图的操作执行的, 没有碰到任何问题.
![](https://img.haomeiwen.com/i11492843/9d749809d7a57786.png)
开启cmd, 执行文件夹中bootstrap.bat然后等, 要等一会
然后再执行 .\b2再等然后就完事了.
记住任务结束后的两个地址, 我们会在后面使用(一个是root,一个是lib lib在root上加stage/lib)
ps. boost 我看很多别的博客都采用b2或者bjam去自己指定参数编译, 我没有采用这种办法, 但是实际证明后续也一切正常, 请放心使用.
cmake安装
cmake不需要安装, 直接下载在本地解压然后打开cmake_gui就可以用了.
正式开始编译shark
首先我们把shark3.0下载解压好, 另外准备好一个空文件夹用来放接下来会产生的vs项目.
打开cmake_gui填好文件夹位置
创造两个entry
BOOST_ROOT 和BOOST_LIBRARYDIR属性都选择path, 内容分别为boost安装时要保存的两个路径.
CMAKE_INSTALL_PREFIX决定的是你生成的shark库所在地, 默认c盘位置是普通权限无法读写的, 请换地方.
然后configure选择自己vs版本, 其余选项不管(采取默认).
确定后, 正常会出现报错, 显示cmake找不到boost库, 没事这时候只要把Boost_USE_STATIC_LIB点上勾, 再次点击configure即可.
随后entry目录被更新, 下面提示栏会显示有两项没有找到, 但是不需要去管, 没有问题.
直接再次点击configure(也就是按照默认entry目录), 然后一切正常, 继而generate, 最后打开vs项目.
那么到这里shark的vs项目就被生成完了, 我们第一步也就做好了
第二步
通过vs来编译生成shark库, 我们如果想在其他项目中使用shark内容, 需要两个东西, 一个是include目录, 告知编译器shark存在哪些库, 另一个是lib静态库, 用于编译时链接二进制文件.
首先不要直接生成整个shark解决方案, 这个是行不通的, 并且240个项目耗时很长, 你会出现无法打开shark_debug.lib的问题, 还有其余的报错. 这是很多其他博客里轻描淡写但实际上根本做不到的一点.
要解决这个问题, 首先我们找到项目中的shark工程
![](https://img.haomeiwen.com/i11492843/7a0e15bf05fee539.png)
我们首先需要通过单独生成shark工程来生成shark_debug.lib, 这样其他项目才能够正常编译.
你可以试着生成它, 会报错, 错误是size()函数出错.
这里, 打开shark工程中的源码的RNNet.cpp, 寻找调用size()函数的地方, 添加shark::在前面, 解决size报错.
再次生成, 一切顺利那么shark_debug.lib应该就已经存在.
如果依旧有问题, 可以参考(https://blog.csdn.net/weixin_40162095/article/details/104348828)这篇中对项目属性的设定.
我们重新考察项目
![](https://img.haomeiwen.com/i11492843/ce1e3225ecb8e7ee.png)
实际上 INSTALL工程是cmake对大项目编译自动生成的模块, 我们通过编译这个工程便可以得到所需要的include目录和lib包. 这是其他项目调用shark所需的全部内容
所以接下来, 我们生成它.
首先同样解决size函数报错, 然后对shared_ptr标识符无法识别前加boost::
最后如果有setlocal报错, 请把cmake时CMAKE_INSTALL_PREFIX修改为正常权限可以读写的地方.
那么解决这些问题后, 你查看CMAKE_INSTALL_PREFIX目录, 你会发现
![](https://img.haomeiwen.com/i11492843/1a6af837deff5910.png)
其中lib包含我们需要的lib文件(实际上正是我们的shark_debug.lib), include则是我们所需包含目录
那么到这里实际上我们已经完成了shark的安装.
所以其实shark安装的核心就是install模块, 只要我们能把它成功执行, 那么一切顺利, 如果不能直接安装, 才去考虑曲线救国.
在其余项目中使用shark库
打开vs的属性设置
![](https://img.haomeiwen.com/i11492843/618f43079719cb91.png)
我们需要设置包含目录和依赖lib, 分别在c/c++常规和链接器里设置
![](https://img.haomeiwen.com/i11492843/84d65f9dc44e54bb.png)
根据需要添加boost, 然后注意我shark包含目录后续有include\shark并不是单纯的include, 我直接用include目录结尾, 则代码include语句需要加两个shark 类似(#include <shark/shark/Data/Csv.h>)
![](https://img.haomeiwen.com/i11492843/c52ff5c9d9630209.png)
boost也是按需填写, 填入之前所说lib目录即可.
![](https://img.haomeiwen.com/i11492843/76ce09717f0f1370.png)
这些完成后, 就大功告成了, 尝试自己引用shark库文件编译, 应该一切正常.
总结
shark作为c++库, 比pytorch等框架麻烦多了, 但是实际上用起pytorch c++接口也不见得过程简单在哪里, c++语言特性决定了这安装过程的繁琐. 希望本篇能为各位在安装方面提供些许帮助, 如果真如此那么我花费的时间也就更具有意义.
网友评论