Ubuntu中c++项目引用第三方包库的方法

  今天下午,调试一个程序不通过,经过不懈的搜索和努力,终于搞定,决定把这个经验写下来,以备日后参考。

  事情是这样的,由于研究的需要我需要一个图匹配的软件包,利用google搜索到了一个GraphM包 (cbio.ensmp.fr/graphm/)。从该网站下载到我的Ubuntu系统上,按照提示:

  1.     unpack: tar zxvf graphm-xx.tar.gz
  2. cd graphm
  3. ./graph_install
发现按装不成功,提示说找不到文件gsl/gsl_blas.h文件。在解压过的文件堆里,我就没有找到gsl这个文件夹。边把提示的错误信息输入google查询,边思考问题之所在。居然发现gsl是一个科学计算的包库,它的全称是GNU Scientific Library。我太孤陋寡闻了,居然连这个包都不知道。可能是由于我经常使用Windows操作系统的缘故吧,对Linux系统下的一个工具不太熟悉。例如,在Window下科学计算的包就知道的比较多,像著名的William H. Press等人写的《Numerical Recipes: the art of Scientific Computing》就提供一个开源的写好的C代码库,供需要的人使用,其他的项Matlab, maple就更不用说了。
   不用说,我需要将GSL安装到我的计算机上。因为下载下来的gsl仅仅是一些C++书写的源文件,所以,这里“安装”的意思就是对这些文件执行compile and link命令。我在网站 mirrors.ustc.edu.cn/gnu/gsl/上面下载了gsl-1.8版本。经过相应的配置(mkdir /home/chgzhi/dev; ./configure --prefix=/home/chgzhi/dev),我编译和链接后的文件装在了/home/chgzhi/dev上面。同时用一个例子测试一下,证明安装正确。

    接下来的问题就是怎么让我的GraphM包在make的时候找到安装在/home/chgzhi/dev下的库gsl。虽然我不经常使用Ubuntu系统,但是由于需要,我在几个月前认真阅读了关于make的相关资料。这方面的知识终于用上了,具体的make命令细节虽然记不清楚,但是我心中还是有个谱,不像以前,见到密密麻麻的make命令时畏首畏尾。由此可见,虽然当时学习的知识不见得能用上,但总有一天用上的时候会使你受益匪浅。由于./graph_install要调用make命令,而make命令会自动执行makefile文件中的指令,安装正常人的思路,我就要在makefile文件中更改相应的make指令了。我把所有依赖到gsl的源文件都加上了下面信息:
  $(CXX) $(CFLAGS) -I/home/chgzhi/dev/include xx.cpp ./obj/*o $(LDFLAGS) -L/home/chgzhi/dev/lib -o ./bin/graphm -lgsl -lgslcblas -lm
其中,红颜色部分的内容是我添加的。具体哪些文件依赖gsl,你只要在bash terminal下面执行./graph_install命令,根据错误提示信息就可以知道了。

   上面设置好后,执行./graph_install,安装成功。我要判断该GraphM程序是否可用,于是运行了该包提供的一个例子,成功。

  今天学习了怎样引用第三方包库,在一个项目中。Ubuntu系统虽然不经常用,但用的时候一定要知道怎么用,这就在域平常的积累,而不是突击某一天就把它学会。纵使学会了,它的许多操作也会很快就忘,还是要在于日积月累的使用才能把它们长久的记住。奋斗吧!

你可能感兴趣的:(Ubuntu中c++项目引用第三方包库的方法)