本人知道shark在安裝時(shí)會(huì)有很多困難, 所以我盡全力分享自己的經(jīng)驗(yàn)和嘗試, 希望能幫到大家!
配置 shark 3.0+Windows 10+VS 2017+boost 1.73.0+cmake 3.18.0-win64-x64
上面這個(gè)配置是本人嘗試成功的配置, 曾經(jīng)嘗試替換boost 1.73為 1.59 結(jié)果在cmake部分失敗,無(wú)法configure成功.
上述環(huán)境中, boost和cmake均是目前最新版本(2020/6/23), 可以放心食用.
按照順序來(lái) 我們先編譯boost庫(kù), 隨后下載cmake, 生成shark項(xiàng)目, 最后編譯項(xiàng)目, 同時(shí)在其它項(xiàng)目中調(diào)用shark庫(kù).
boost庫(kù)編譯
之前提到了, boost 1.73.0是我用的版本, 下載得到一個(gè)壓縮包解壓得到下圖

打開本地網(wǎng)頁(yè), 然后界面如下

點(diǎn)擊getting start后跳轉(zhuǎn)到相關(guān)說(shuō)明的網(wǎng)頁(yè).
后續(xù)說(shuō)明的內(nèi)容總結(jié)起來(lái)就是, 一部分boost模塊只需要引用頭文件就可以, 另一部分你需要編譯出靜態(tài)庫(kù).(這不意味著你有概率不需要編譯, 請(qǐng)不要心存僥幸)
編譯過程很簡(jiǎn)單, 我按照下圖的操作執(zhí)行的, 沒有碰到任何問題.

開啟cmd, 執(zhí)行文件夾中bootstrap.bat然后等, 要等一會(huì)
然后再執(zhí)行 .\b2再等然后就完事了.
記住任務(wù)結(jié)束后的兩個(gè)地址, 我們會(huì)在后面使用(一個(gè)是root,一個(gè)是lib lib在root上加stage/lib)
ps. boost 我看很多別的博客都采用b2或者bjam去自己指定參數(shù)編譯, 我沒有采用這種辦法, 但是實(shí)際證明后續(xù)也一切正常, 請(qǐng)放心使用.
cmake安裝
cmake不需要安裝, 直接下載在本地解壓然后打開cmake_gui就可以用了.
正式開始編譯shark
首先我們把shark3.0下載解壓好, 另外準(zhǔn)備好一個(gè)空文件夾用來(lái)放接下來(lái)會(huì)產(chǎn)生的vs項(xiàng)目.
打開cmake_gui填好文件夾位置
創(chuàng)造兩個(gè)entry
?BOOST_ROOT 和BOOST_LIBRARYDIR屬性都選擇path, 內(nèi)容分別為boost安裝時(shí)要保存的兩個(gè)路徑.
CMAKE_INSTALL_PREFIX決定的是你生成的shark庫(kù)所在地, 默認(rèn)c盤位置是普通權(quán)限無(wú)法讀寫的, 請(qǐng)換地方.
然后configure選擇自己vs版本, 其余選項(xiàng)不管(采取默認(rèn)).
確定后, 正常會(huì)出現(xiàn)報(bào)錯(cuò), 顯示cmake找不到boost庫(kù), 沒事這時(shí)候只要把Boost_USE_STATIC_LIB點(diǎn)上勾, 再次點(diǎn)擊configure即可.
隨后entry目錄被更新, 下面提示欄會(huì)顯示有兩項(xiàng)沒有找到, 但是不需要去管, 沒有問題.
直接再次點(diǎn)擊configure(也就是按照默認(rèn)entry目錄), 然后一切正常, 繼而generate, 最后打開vs項(xiàng)目.
那么到這里shark的vs項(xiàng)目就被生成完了, 我們第一步也就做好了
第二步
通過vs來(lái)編譯生成shark庫(kù), 我們?nèi)绻朐谄渌?xiàng)目中使用shark內(nèi)容, 需要兩個(gè)東西, 一個(gè)是include目錄, 告知編譯器shark存在哪些庫(kù), 另一個(gè)是lib靜態(tài)庫(kù), 用于編譯時(shí)鏈接二進(jìn)制文件.
首先不要直接生成整個(gè)shark解決方案, 這個(gè)是行不通的, 并且240個(gè)項(xiàng)目耗時(shí)很長(zhǎng), 你會(huì)出現(xiàn)無(wú)法打開shark_debug.lib的問題, 還有其余的報(bào)錯(cuò). 這是很多其他博客里輕描淡寫但實(shí)際上根本做不到的一點(diǎn).
要解決這個(gè)問題, 首先我們找到項(xiàng)目中的shark工程

我們首先需要通過單獨(dú)生成shark工程來(lái)生成shark_debug.lib, 這樣其他項(xiàng)目才能夠正常編譯.
你可以試著生成它, 會(huì)報(bào)錯(cuò), 錯(cuò)誤是size()函數(shù)出錯(cuò).
這里, 打開shark工程中的源碼的RNNet.cpp, 尋找調(diào)用size()函數(shù)的地方, 添加shark::在前面, 解決size報(bào)錯(cuò).
再次生成, 一切順利那么shark_debug.lib應(yīng)該就已經(jīng)存在.
如果依舊有問題, 可以參考(https://blog.csdn.net/weixin_40162095/article/details/104348828)這篇中對(duì)項(xiàng)目屬性的設(shè)定.
我們重新考察項(xiàng)目

實(shí)際上 INSTALL工程是cmake對(duì)大項(xiàng)目編譯自動(dòng)生成的模塊, 我們通過編譯這個(gè)工程便可以得到所需要的include目錄和lib包. 這是其他項(xiàng)目調(diào)用shark所需的全部?jī)?nèi)容
所以接下來(lái), 我們生成它.
首先同樣解決size函數(shù)報(bào)錯(cuò), 然后對(duì)shared_ptr標(biāo)識(shí)符無(wú)法識(shí)別前加boost::
最后如果有setlocal報(bào)錯(cuò), 請(qǐng)把cmake時(shí)CMAKE_INSTALL_PREFIX修改為正常權(quán)限可以讀寫的地方.
那么解決這些問題后, 你查看CMAKE_INSTALL_PREFIX目錄, 你會(huì)發(fā)現(xiàn)

其中l(wèi)ib包含我們需要的lib文件(實(shí)際上正是我們的shark_debug.lib), include則是我們所需包含目錄
那么到這里實(shí)際上我們已經(jīng)完成了shark的安裝.
所以其實(shí)shark安裝的核心就是install模塊, 只要我們能把它成功執(zhí)行, 那么一切順利, 如果不能直接安裝, 才去考慮曲線救國(guó).
在其余項(xiàng)目中使用shark庫(kù)
打開vs的屬性設(shè)置

我們需要設(shè)置包含目錄和依賴lib, 分別在c/c++常規(guī)和鏈接器里設(shè)置

根據(jù)需要添加boost, 然后注意我shark包含目錄后續(xù)有include\shark并不是單純的include, 我直接用include目錄結(jié)尾, 則代碼include語(yǔ)句需要加兩個(gè)shark 類似(#include <shark/shark/Data/Csv.h>)

boost也是按需填寫, 填入之前所說(shuō)lib目錄即可.

這些完成后, 就大功告成了, 嘗試自己引用shark庫(kù)文件編譯, 應(yīng)該一切正常.
總結(jié)
shark作為c++庫(kù), 比pytorch等框架麻煩多了, 但是實(shí)際上用起pytorch c++接口也不見得過程簡(jiǎn)單在哪里, c++語(yǔ)言特性決定了這安裝過程的繁瑣. 希望本篇能為各位在安裝方面提供些許幫助, 如果真如此那么我花費(fèi)的時(shí)間也就更具有意義.