基于ITK编译工程项目时提示 LNK2001 itk::NumericTraits的错误解决方法

时间:2022-11-03 09:13:37

本文由Markdown语法编辑器编辑完成。

1. 问题提出:

前段时间在运用ITK作为第三方库进行项目编译时。编译过程中弹出了LNK 2001的错误。错误提示大概是:

基于ITK编译工程项目时提示 LNK2001 itk::NumericTraits的错误解决方法

基于ITK编译工程项目时提示 LNK2001 itk::NumericTraits的错误解决方法

对于这个错误,在网上查询了一些解答和方案,但是都没有找到好的解决方案。
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编译工程项目时提示 LNK2001 itk::NumericTraits的错误解决方法

因为,ITK的编译和VTK的编译稍微有点差别。VTK的编译,默认是会既编译出Lib,又编译出DLL的。而ITK的编译,默认是不编译DLL的。

基于ITK编译工程项目时提示 LNK2001 itk::NumericTraits的错误解决方法

但是,当你勾选了”BUILD_SHARED_LIBS”后,它就会重新编译出dll。
这样,如果你先后编译选项选择得不一样时,生成的静态链接库Lib就是不一样的。这样会存在Lib的版本不一致的问题。而正是因为这个原因,而导致了在编译时,会出现如LNK 2001那样的错误。

所以,明确了问题的原因后。将原来编译好的lib先删除掉,然后重新生成Lib文件,再调试就应该没有问题了。

3. 参考链接:

  1. C++编程中遇到的LNK2001连接错误
    http://www.cnblogs.com/lxw0109/archive/2012/05/02/LNK2001.html

完。