在vs2010下编译配置igraph,遇到了一些问题,记录如下。
step 1、编译
由于igraph源码是linux编写的,尽管官方也提供了对应windows的sln工程,但是毕竟不是原生环境,有条件的同学建议还是在linux下工作。igraph-C下载地址在此,本文igraph版本为0.7.1。
使用vs2010打开,提示升级(官方提供sln工程的vs版本<2010,好像是v7.1),升级后点击生成,出现问题:
作者在git上说这是igraph的MSVC版本的bug,需要在“属性——C/C++——命令行”设置中增加一句编译命令“/DPRPACK_IGRAPH_SUPPORT=1 ”,然后重新生成即可。(吐槽,这是2013年的issue,至今不修复,太真实了)。
step 2、使用
sln工程生成的结果,就是对源码编译的结果,也就是igraph.lib。官方在提供源码的sln工程的同时,也给了一个igraphtest工程,可是我这里用vs2010打开报错无法升级,因此换个方法测试。
我创建了一个vs2010下的c++控制台程序,并开始传统艺能,对“属性——vc++目录”下的“包含目录”和“库目录”分别添加存放igraph.h和igraph.lib的路径,对应刚刚编译的工程,就是include目录和Debug目录;再对“属性——链接器——输入”下的“附加依赖项”添加“igraph.lib”。在控制台cpp文件中, 将官方测试工程的cpp代码贴到响应位置(即添加引用和主函数语句),运行,又报错:
google得知,这是运行库类型设置错了。源码工程是/MT和/MTd的,而我新创建的工程是/MD的。也就是说,igraph编译的lib是静态库,也就不能当做动态库使用。在“属性——C/C++——代码生成——运行库”即可指定。重新生成后,只剩一个错误了。
根据博客,这个问题有多种可能性,在我这里使用博文中的第一步就可解决了。其原理.....不求甚解了这里。
由此即可顺利使用igraph库了。