本文由Markdown语法编辑器编辑完成。
1. 问题提出:
前段时间在运用ITK作为第三方库进行项目编译时。编译过程中弹出了LNK 2001的错误。错误提示大概是:
对于这个错误,在网上查询了一些解答和方案,但是都没有找到好的解决方案。
LNK 2001的错误和LNK 2019的错误还不太一样。如果是LNK 2019的错误,那么我可以很明确地知道它一定是由于lib缺失而导致的,我就可以专心去找lib的错误。
但是LNK 2001的错误有几个因素,关于LNK 2001的错误解释,MSDN上的解释为:
int val = itk::NumericTraits::Zero.
2. 问题解决:
大部分在网络上搜到的原因,都是说可能是变量没有初始化导致的。但是,很明显我犯的不是这样的错误。而且,系统奔溃时定位的itk::NumericTraits::Zero类我也并没有使用过,怎么会定位在这里呢。
最后,在访问国外的一些论坛时,看到一个回答,给了我一个提醒。
他提到:这个可能跟当时在编译ITK时选择的默认编译选项有关。
我于是想起了,我之前可能中途修改过ITK的编译选项,就是是否要编译动态链接库的选项。
具体的回答如下所示:
https://cmake.org/pipermail/insight-users/2004-March/007206.html
因为,ITK的编译和VTK的编译稍微有点差别。VTK的编译,默认是会既编译出Lib,又编译出DLL的。而ITK的编译,默认是不编译DLL的。
但是,当你勾选了”BUILD_SHARED_LIBS”后,它就会重新编译出dll。
这样,如果你先后编译选项选择得不一样时,生成的静态链接库Lib就是不一样的。这样会存在Lib的版本不一致的问题。而正是因为这个原因,而导致了在编译时,会出现如LNK 2001那样的错误。
所以,明确了问题的原因后。将原来编译好的lib先删除掉,然后重新生成Lib文件,再调试就应该没有问题了。
3. 参考链接:
- C++编程中遇到的LNK2001连接错误
http://www.cnblogs.com/lxw0109/archive/2012/05/02/LNK2001.html
完。