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
就行了。

下面附上测试程序:

 

 

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