iGraph算法框架运行出错及解决方案

1 介绍

我看了一篇论文[1],并向作者要了该论文的源代码。该算法框架是以Visual C++ console程序项目的形式提供的源代码。我想运行一下作者提供的源代码,双击GraphIndexing.sln 文件进入这个算法框架项目,我所使用的IDE 版本为VS2010。在VS2010的Solution view下设置启动项目为CTree,然后Build,能成功,但是当Start without debugging时,程序不能运行,提供的错误信息为图1:
iGraph算法框架运行出错及解决方案_第1张图片
Figure 1: CTree 程序运行后的报错信息
既然提示说程序运行时缺少一个动态链接库文件(.dll文件),我的第一个反应就是,搜索我的电脑上是否存在该文件。搜集结果为在以下的三个文件夹中都存在这个文件:
  •   ...\iGraphV1\TBB\ia32\vc7.1\bin
  •  ...\iGraphV1\TBB\ia32\vc8\bin
  •  ...\iGraphV1\TBB\ia32\vc9\bin
它们间的区别只是文件的大小。不用做认真的分析,我们就应该知道,这三个同名的tbbmalloc proxy debug.dll 文件是为不同版本的VS 编译的项目所准备的。由于我利用的是VS2010,我想应该对应为vc9 文件夹下的那个文件吧。于是,我就把tbbmalloc proxy debug.dll 及tbbmalloc proxy debug.pdb 这两个文件拷贝到CTree 可执行程序所在的Debug 文件夹,点击运行,还是没有成功,如图2提示:
iGraph算法框架运行出错及解决方案_第2张图片
Figure 2: 加入dll 文件后,CTree 程序运行后的报错信息
按照上面的提示信息在Google 上搜索解决方案,都不能解决问题。很快到了要吃午饭的时间。师弟提示我该吃饭了,于是我和他步行去一饭。在路上我和他聊了这个问题,他也给我了一些建议。在我们吃过免费赠送的汤圆后,我突然想到了问题的解决方案。原因是该项目所依赖的第三方包库tbb...dll的版本不对,也就是说VS2010 不是对应的文件夹vc9 下的文件。为了弄清VS 与vc 之间的对应关系,我整理出了上一篇博文《Visual studio IDE 与visual C++之间的对应关系(Correspondence)》,确定出了VS2010 与C10相对应。事实上,在作者提供的源代码所依赖的第三方包库TBB 文件夹下就没有vc10 子文件夹,那该怎么办呢?

2 解决方案

从网站https://www.threadingbuildingblocks.org/download 上面下载Stable Release 版本tbb 4.3 Update 2,解压缩下载的zip文件,因为我使用的是32位的Win7 系统,所在从解压缩后的文件夹tbb43 20141204\bin\ia32\vc10 下拷贝以下4个文件:
  •  tbbmalloc proxy debug.dll
  •  tbbmalloc proxy debug.pdb
  •  tbbmalloc proxy.dll
  •  tbbmalloc proxy.pdb
到包含有可执行程序CTree.exe的文件夹Debug下,再次运行就成功了。
特别提示:在使用第三方库tbb进行项目开发的时候,我们要用tbb提供的.lib文件和.h文件,而编译好自己开发的项目后,运行可执行程序时,才需要dll文件。这些文件的地位和作用要弄清楚。

3 反思

遇到一个问题是要淡定,不要灰心丧气。在网络上搜索别人的解决方案时,一定要根据自己的情况加进自己的理解和思考,这样才能有效的解决问题。事实上,该问题的产生根源是作者开发时,在当时的时间段最新版本的Visual Studio 只能是2008,而在现在,大部分人至少在使用VS2010,所以造成了依赖的第三方包库的版本匹配问题。

References

[1] Wook-Shin Han, Jinsoo Lee, Minh-Duc Pham, and Jeffrey Xu Yu. igraph: A framework for comparisons of disk-based graph indexing techniques. PVLDB, 3(1):449–459, 2010.

你可能感兴趣的:(iGraph算法框架运行出错及解决方案)