Ubuntu下使用cholmod求解稀疏矩陣

  首先自我檢討一下,自從第一篇文章到現在將近兩個月的時間沒有寫了,慚愧阿。項目也擱置了一段時間,現在準備接着做,由於要確定可行性,所以要把我認爲最難的問題確定下是否可以解決。網格的數據結構可以使用openmesh,現在最難的就是數值計算的部分,在windows下我使用了cholmod(不瞭解的可以google下什麼是cholmod)作爲稀疏矩陣運算的庫,所以理所應當在linux首選肯定也是它。下面就簡單說一下如何安裝cholmod。

 

  其實在ubuntu下開發比windows要爽多了,只要執行apt-get install libsuitesparse-dev 就算是把cholmod所在的稀疏矩陣套件安裝完了,metis庫是可選的,我也安裝了:apt-get install libsuitesparse-metis-dev 。這時我把windows下測試cholmod的一個測試文件傳過來編譯了下,發生了鏈接錯誤,大概意思就是所有的cholmod的函數都鏈接不到,我仔細查看了安裝目錄/usr/include/suitesparse和/usr/lib/發現頭文件和庫文件都在,鬱悶了好一陣子,這時我開始懷疑是不是apt-get安裝的庫是有問題的,於是我在/usr/lib/目錄下執行ls -la | grep cholmod. 結果如下:

        libcholmod.a
        libcholmod.so -> libcholmod.so.3.1.0
        libcholmod.so.1.7.1

問題來了,libcholmod.so這個符號鏈接指向了一個並不存在的文件,我覺得這應該是安裝時的錯誤,於是我將這個符號鏈接重新指向了libcholmod.so.1.7.1:執行rm libcholmod.soln -s libcholmod.so.1.7.1 libcholmod.so 。我還發現cholmod依賴的幾個庫都有這個問題,所以我也順便把libamd,libcamd,libccolamd,libcolamd這幾個庫的符號鏈接也修復了。然後重新編譯測試程序並運行,一切ok,問題解決了。

 

  現在說一下如何使用cholmod,也就是如何編譯測試程序,由於頭文件目錄是在/usr/include/suitesparse/目錄下,而相應的動態庫是在/usr/lib/目錄下,所以在makefile中只需要寫

    g++ -O2 -Wall -o test -I/usr/include/suitesparse/ -lmetis -lamd -lcamd -lccolamd -lcolamd -lblas -lcholmod test.cpp
就行了。

下面附上測試程序:

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章