1. 0x00000000000000处有未经处理的异样
程序运行时出现下面问题肯定是内存错误,但到底是数组越界(数组边界溢出),指针错误,链接库问题......就需要进一步调试(debug)。
链接:赛码在线开始系统:http://oj.acmcoder.com/QA/
问在线编程题总是报运行错误,是什么情况?
答运行错误一般都是数组越界非法访问,野指针乱访问,空指针乱访问等情况造成代码奔溃
2. error LNK2019
LINK :error LNK2019:无法解析的外部符号 "__declspec(dllimport)...《进阶》p11
这类问题与库在具体环境下的配置不完善所造成的库的加载错误有关,解决方法如下:
方法1:自动配置(CMakeLists.txt脚本文件、CMake配置及生成新的工程)
网上有很多资料讲到在MFC环境下开发VTK程序时,需要手动在Visual Studio中设置VTK的包含路径和liib库路径。这种方法对于一般用户来说比较复杂,每次新建工程时,都要查找和设置这些库,既费时费力,又不利于程序的移植(例如换到另外一台计算机,如果VTK编译路径不一致,就找不到库)。因此推荐读者使用CMake来管理工程(如下),因为仅仅几行脚本代码就可以实现VTK库在具体环境下的配置,而且便于程序移植!
//设置方法(bin(dll)——>include(h)——>lib(lib))
Step1:①设置编译好的动态库目录(.dll)bin文件夹路径到系统path环境变量中。(似乎不用,见问题3)
Step2:②修改CMakeLists.txt文件的MODULE_INCLUDE_DIRECTORIES(.h)包含目录和MODULE_TARGET_LIBRARIES(.lib)库目录两个变量的值;
Step3:然后重新配置(configure)、生成(generate)新的工程。
参见:http://blog.163.com/qimo601@126/blog/static/1582209320169711559384/
方法2:手动配置(path环境变量—VTK的动态库目录路径(bin)、VTK的包含目录路径(include)、VTK的lib库目录路径(lib)—VTK的具体所需的库文件)
注意:
.a 文件肯定是静态链接库对吧?
我记得 .lib文件不一定是静态链接库文件,还有可能是dll的地址文件。
//设置方法(版本1)(bin(dll)——>include(h)——>lib(lib))
Step1:设置编译好的①动态库目录(.dll)bin文件夹路径到系统path环境变量中。
直接在工程中修改项目属性,步骤如下:
Step2:VC++目录——>常规——>②包含目录(.h)VTK的include文件夹路径;
Step3:VC++目录——>常规——>③库目录(.lib)VTK的lib文件夹路径;
Step4:链接器——>输入——>④附加依赖项(.lib)具体的所有的依赖的(需要链接的)VTK的库文件lib。
//设置方法(版本2)(bin(dll)——>include(h)——>lib(lib))
Step1:设置编译好的①动态库目录(.dll)bin文件夹路径到系统path环境变量中。
直接在工程中修改项目属性,步骤如下:
Step2:C/C++——>常规——>②附加包含目录(.h)VTK的include文件夹路径;
Step3:链接器——>常规——>③附加库目录(.lib)VTK的lib文件夹路径;
Step4:链接器——>输入——>④附加依赖项(.lib)具体的所有的依赖的(需要链接的)VTK的库文件lib。
也有可能是下面两种方式选择不对造成的:
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2);
或
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL);
3. 计算机中丢失xxx.dll
这是运行时错误,是动态库加载问题,是因为无法链接到动态库造成的(计算机中丢失XXX.dll),如果工程项目的属性设置确保正确,采用如下4种方式解决:
解决方式 |
序号 |
具体操作 |
缺点 |
全部复制 |
① |
将提示无法找到的dll文件全部复制到工程的Debug或者Release目录下(复制时要注意编译的VTK(需要复制的)是Debug版本还是Release版本,如果复制版本不对,可能会出现其他不可预知的错误!) |
该方法要求每新建一个工程,程序运行之间都需要复制所提示的dll文件,明显比较烦琐。 |
② |
将提示无法找到的dll |