Ceres Solver 在Windows下安裝配置筆記

引子

因為項目需要用到Ceres Solver這個庫實現(xiàn)非線性優(yōu)化押框,這幾天投入了很多時間來學(xué)習(xí)研究吝羞。沒想到的是,這個庫的安裝就非常繁瑣默赂。官方的安裝指南寫的卻過于簡略。尤其是在Windows環(huán)境下括勺,問題bug不斷缆八,很多坑。經(jīng)過三天努力疾捍,今天終于成功hello world奈辰。高興之余趕快趁機把安裝過程記錄下來,以便備忘乱豆。本文除了記錄Ceres Solver的安裝過程之外奖恰,還詳細記錄了gflags,glog宛裕,SuiteSpares的安裝過程瑟啃,尤其是一些配置選項。希望能對其他人有些許的幫助揩尸。

Ceres Solver是一個C++環(huán)境下的非線性最小二乘問題的求解工具包蛹屿,可用來建模并解決大型復(fù)雜的非線性最小二乘問題。這個工具包已經(jīng)廣泛被用于很多商業(yè)軟件中疲酌。在google project里面有它的主頁: http://code.google.com/p/ceres-solver/蜡峰。

環(huán)境

  • Windows 10 Pro
  • Visual Studio 2015
  • Cmake GUI 3.10.2

安裝前的準備

  • Ceres-solver 1.13.0
  • Eigen 3.3.4
  • gflags 2.2.1
  • glog
    • 下載地址:https://github.com/google/glog
    • Google Glog是Google的一個開源庫粥诫,用于實現(xiàn)應(yīng)用級別的logging油航。 它提供了一系列類似于C++流風(fēng)格的logging API,以及一些預(yù)定義的宏怀浆。它有點類似于C里面的assert谊囚,但是比它具備更豐富的輸出信息以及使用靈活性怕享。
    • 我用的是 2018年2月27日的commit版本。相比最新的release 0.3.5 (發(fā)布于2017年5月)镰踏,此commit版去掉了已經(jīng)生成VS的工程文件(.sln)函筋。安裝過程更可控。
  • suitesparse-metis-for-windows Release 1.3.1
    • 下載地址:https://github.com/jlblancoc/suitesparse-metis-for-windows
    • 這個并不是必須安裝的依賴庫奠伪。但是如果裝上將會提高Ceres對稀疏矩陣的計算性能跌帐,提供更多可用的優(yōu)化算法。所以雖然加入這個庫之后Ceres的安裝過程會更加繁瑣绊率,但是仍然推薦安裝谨敛。這個庫的原生版本本身對Windows的支持不好,所以在Windows上要使用這個專門針對Windows的衍生版本滤否。另外脸狸,這個庫還存在一個名為CXSparse的簡化版本。

建立一個文件夾藐俺,如C:\Ceres_Install炊甲,并在此文件夾內(nèi)為每個依賴庫建立一個子文件夾存放源代碼。然后把所有源代碼解壓放到對應(yīng)的子文件夾內(nèi)紊搪。另外為每個庫再建立一個按照"庫名-build"命名的文件夾蜜葱,盛放生成后的工程文件。

文件層級布局

安裝Eigen

Eigen庫本身是并不需要安裝的耀石,解壓放在某文件夾內(nèi)即可牵囤。但是我更希望將他們這些庫放在同一位置方便管理,如C:\Program Files滞伟。這樣也方便其他庫的定位揭鳞。

啟動CMake GUI。指定源代碼位置為C:/Ceres_Install/eigen-eigen梆奈,輸出位置為C:/Ceres_Install/eigen-build野崇。編譯平臺根據(jù)系統(tǒng)環(huán)境選擇“Visual Studio 14 2015 Win64”,下同亩钟。

配置選項中:

  • 取消所有的Test類項乓梨。
  • CMAKE_INSTALL_PREFIX = C:/Program Files/Eigen3

因為要安裝目錄位于C:/Program Files/,所以必須以管理員身份運行Visual Studio 2015清酥,否則沒有讀寫權(quán)限扶镀。然后打開C:/Ceres_Install/eigen-build/Eigen3.sln解決方案。分別以Debug和Release模式(x64)生成INSTALL項目以完成安裝焰轻。

安裝gflags

啟動CMake GUI臭觉。指定源代碼位置為C:/Ceres_Install/gflags,輸出位置為C:/Ceres_Install/gflags-build。同樣Configure->選擇平臺VS2015 x64->設(shè)置配置選項->Generate蝠筑。

配置選項中:

  • 取消選中BUILD_Testing
  • CMAKE_INSTALL_PREFIX = C:/Program Files/gflags
  • !!! 選中BUILD_SHARED_LIBS 以便生成.dll文件

以管理員身份運行Visual Studio 2015狞膘,打開剛生成的對應(yīng)解決方案gflags.sln。分別以Debug和Release模式(x64)生成ALL_BUILD項目以編譯生成二進制文件什乙。然后分別以Debug和Release模式(x64)生成INSTALL項目以完成安裝挽封。

安裝glog

同樣的過程,使用CMake將glog的源代碼生成為VS工程文件放入glog-build文件夾稳强。同樣也要注意CMake配置選項场仲。

配置選項中:

  • 取消選中BUILD_TESTING
  • CMAKE_INSTALL_PREFIX = C:/Program Files/glog (如果用release 0.3.5 默認google-glog)
  • 選中WITH_GFLAGS
  • gflags_DIR = C:/Program Files/gflags/lib/cmake/gflags
  • !!! 選中BUILD_SHARED_LIBS以便生成.dll文件和悦。如果該項不存在通過“Add Entry”手動加入退疫。

以管理員身份運行Visual Studio 2015,打開剛生成的對應(yīng)解決方案glog.sln鸽素。分別以Debug和Release模式(x64)生成ALL_BUILD項目和INSTALL項目褒繁。

安裝SuiteSparse (optional)

SuiteSparse 的安裝就相對前兩個庫麻煩一點。
首先依然是cmake-configure-generate馍忽。

配置選項中:

  • 取消選中BUILD_METIS棒坏,否則在編譯METIS庫是會發(fā)生很多莫名其妙的錯誤。
  • 取消選中HAVE_COMPLEX遭笋,否則也會有很多莫名其妙的錯誤坝冕,這些錯誤和平臺的兼容性有關(guān)。
  • SUITESPARES_INSTALL_PREFIX = C:/Program Files/suitesparse (!!!默認C:/Ceres_Install/suitesparse-build/install)瓦呼。
  • !!! 取消選中SHARED喂窟。如果選中會報錯,宣稱缺少一系列.lib文件央串。
  • OPENMP根據(jù)需要設(shè)置磨澡。

以管理員身份運行Visual Studio 2015,打開剛生成的對應(yīng)解決方案SuiteSparseProject.sln质和。分別以Debug和Release模式(x64)生成ALL_BUILD項目和INSTALL項目 稳摄。雖然很多警告,但是仍然可以成功編譯饲宿。但是目前只生成了靜態(tài)庫文件厦酬,我們還需要動態(tài)鏈接庫,即.dll文件瘫想。

下面我們在剛才的CMake中仗阅, 重新選中SHARED項,其他項不變殿托,再次點擊generate霹菊。之后用Visual Studio重新打開此解決方案。然后此時重新以Debug和Release模式(x64)分別再次生成ALL_BUILD項目和INSTALL項目。因為再上一過程中.lib文件已經(jīng)被生成并且安裝(上一輪編譯一定要生成INSTALL)旋廷,所以這時不會再報錯說缺少.lib文件了鸠按。此時四個依賴庫都安裝完畢,下面是主角Ceres了饶碘。

安裝Ceres-Solver

安裝Ceres的主要困難在于復(fù)雜的CMakeList配置程序目尖。在第一次Configure會得到一個長長的屬性列表。因為Ceres默認使用的是SuiteSparse庫扎运,而經(jīng)過改造的suitesparse-metis-for-windows的配置文件所給出的很多CMake變量(對外接口)與Ceres的接口對不上瑟曲。因此需要手動添加很多內(nèi)容,這也是最坑爹之處豪治。

根據(jù)長時間的摸索洞拨,不斷地實驗和對CMakeList文檔的研究,得出以下可行配置负拟。

配置選項中:

  • 取消選中BUILD_EXAMPLES烦衣。為了節(jié)省后續(xù)編譯時間。
  • 取消選中BUILD_TESTING掩浙。為了節(jié)省后續(xù)編譯時間花吟。
  • 選中BUILD_SHARED_LIBS,以便生成動態(tài)鏈接庫文件厨姚。
  • CMAKE_BUILD_TYPE 設(shè)為 Release衅澈。
  • 選中CUSTOM_BLAS。
  • 添加BLAS_LIBRARIES項(FILEPATH類)賦值 C:/Program Files/suitesparse/lib64/lapack_blas_windows/libblas.lib
  • 選中LAPACK谬墙。
  • 添加LAPACK_LIBRARIES項(FILEPATH類)賦值 C:/Program Files/suitesparse/lib64/lapack_blas_windows/liblapack.lib今布。
  • 選中EIGENSPARSE。如果之前沒有安裝Eigen芭梯,只是解壓险耀。這里還需要手動配置EIGEN_INCLUDE_DIR項或Eigen3_DIR。
  • GFLAGS和GLOG是否被選中玖喘,并且正確定位甩牺。如果安裝在C盤Program FIles應(yīng)該可以自動定位。
  • 選中SUITESPARSE累奈,注意這一選項會自動取消選中贬派。
  • 添加SUITESPARSE_CHECK_INCLUDE_DIRS項(PATH類)賦值 C:/Program Files/suitesparse/include ,提示suitesparse組件頭文件位置澎媒。
  • 添加SUITESPARSE_CHECK_LIBRARY_DIRS項(PATH類)賦值 C:/Program Files/suitesparse/lib64搞乏,提示suitesparse組件庫文件位置。
  • !!! 添加CMAKE_INSTALL_PREFIX 賦值 C:/Program Files/Ceres戒努。

用管理員身份啟動VS请敦,打開剛剛生成的Ceres解決方案。切換編譯器為Release模式。然后生成ALL_BUILD和INSTALL項目侍筛,完成Release模式的編譯和安裝過程萤皂。

現(xiàn)在切換到Debug模式。然后右鍵單擊“ceres”項目->屬性->C/C++->鏈接器->輸入->附加依賴項匣椰。這里要注意屬性管理也應(yīng)設(shè)為Debug模式裆熙。

將下列庫:

C:\Program Files\suitesparse\lib64\libspqr.lib
C:\Program Files\suitesparse\lib64\libcholmod.lib
C:\Program Files\suitesparse\lib64\libccolamd.lib
C:\Program Files\suitesparse\lib64\libcamd.lib
C:\Program Files\suitesparse\lib64\libcolamd.lib
C:\Program Files\suitesparse\lib64\libamd.lib
C:\Program Files\suitesparse\lib64\suitesparseconfig.lib

改為(文件名后加d表示debug模式對應(yīng)的庫):

C:\Program Files\suitesparse\lib64\libspqrd.lib
C:\Program Files\suitesparse\lib64\libcholmodd.lib
C:\Program Files\suitesparse\lib64\libccolamdd.lib
C:\Program Files\suitesparse\lib64\libcamdd.lib
C:\Program Files\suitesparse\lib64\libcolamdd.lib
C:\Program Files\suitesparse\lib64\libamdd.lib
C:\Program Files\suitesparse\lib64\suitesparseconfigd.lib

其他庫和設(shè)置保持原樣。
此時重新生成ALL_BUILD和INSTALL禽笑。完成Debug模式的編譯和安裝入录。

關(guān)于這一部分的配置也可以通過修改CMakeList實現(xiàn),如果對cmake編程熟練甚至可以重寫FindSuiteSparse以實現(xiàn)自動配置佳镜。這里推薦這篇文章《Ceres-Solver庫使用(一)--windows下安裝配置》僚稿。

配置環(huán)境變量

我的電腦->屬性->更改設(shè)置->高級->環(huán)境變量->系統(tǒng)變量->Path->編輯。注意設(shè)置完環(huán)境變量之后需要重啟Visual Studio以生效邀杏。

在PATH中加入以下五個地址:

C:\Program Files\Ceres\bin
C:\Program Files\gflags\bin
C:\Program Files\glog\bin
C:\Program Files\suitesparse\bin
C:\Program Files\suitesparse\lib64\lapack_blas_windows

至此贫奠,Ceres(含SuiteSparse)安裝過程完成。

測試

C:/Ceres_Install/ceres-solver/examples有很多實例望蜡。我一般使用VS新建工程然后復(fù)制C++源代碼的形式測試。這樣各個項目不會互相影響拷恨。不建議用CMake脖律。
要記得在屬性中加入各種庫Include路徑和Lib文件路徑。包括涉及到的各種庫:Ceres腕侄、Eigen小泉、SuiteSparse、gflags冕杠、glog等等微姊。最好Debug和Release模式分別測試一下運行狀況。

成功“點亮” hello world

主要參考資料

*ceres-solver庫編譯說明 http://blog.csdn.net/liminlu0314/article/details/15860677
*Eigen+suitesparse for windows 安裝 http://blog.csdn.net/xiamentingtao/article/details/50100549
*官方安裝指南 http://ceres-solver.org/installation.html#windows

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末分预,一起剝皮案震驚了整個濱河市兢交,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌笼痹,老刑警劉巖配喳,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異凳干,居然都是意外死亡晴裹,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門救赐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涧团,“玉大人,你說我怎么就攤上這事∶谛澹” “怎么了喳瓣?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長赞别。 經(jīng)常有香客問我畏陕,道長,這世上最難降的妖魔是什么仿滔? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任惠毁,我火速辦了婚禮,結(jié)果婚禮上崎页,老公的妹妹穿的比我還像新娘鞠绰。我一直安慰自己,他們只是感情好飒焦,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布蜈膨。 她就那樣靜靜地躺著,像睡著了一般牺荠。 火紅的嫁衣襯著肌膚如雪翁巍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天休雌,我揣著相機與錄音灶壶,去河邊找鬼。 笑死杈曲,一個胖子當著我的面吹牛驰凛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播担扑,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼恰响,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了涌献?” 一聲冷哼從身側(cè)響起胚宦,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎洁奈,沒想到半個月后间唉,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡利术,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年呈野,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片印叁。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡被冒,死狀恐怖军掂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情昨悼,我是刑警寧澤蝗锥,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站率触,受9級特大地震影響终议,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜葱蝗,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一穴张、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧两曼,春花似錦皂甘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至户辫,卻和暖如春渐夸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背寸莫。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工捺萌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人膘茎。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像酷誓,于是被迫代替她去往敵國和親披坏。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容