将DCMTK与Visual Studio一起使用时,链接器错误LNK2019

时间:2016-11-23 08:57:38

标签: c++ visual-studio-2013 lnk2019 dcmtk

这不是一个新问题,但解决方案对我没有用。我想用C ++阅读dicom文件。我有32位Windows PC和VS 2013社区版。

This post以及其中的其他答案建议使用DCMTK。我安装了DCMTK(使用CMake,后跟VS)并使用this post中提供的指南和链接将其配置为与VS一起使用。然后我写了一个简单的test program并尝试编译它:

#include "stdafx.h"
#include "dcmtk\dcmdata\dctk.h"
#include "dcmtk\config\osconfig.h"
#include "dcmtk\dcmimgle\dcmimage.h"
#include <iostream>
using namespace std;

int main()
{
    DicomImage *image = new DicomImage("test.dcm");
    if (image != NULL)
    {
        if (image->getStatus() == EIS_Normal)
        {
            if (image->isMonochrome())
            {
                image->setMinMaxWindow();
                Uint8 *pixelData = (Uint8 *)(image->getOutputData(8 /* bits */));
                if (pixelData != NULL)
                {
                    /* do something useful with the pixel data */
                }
            }
        }
        else
            cerr << "Error: cannot load DICOM image (" << DicomImage::getString(image->getStatus()) << ")" << endl;
    }
    delete image; 
    return 0;
}

编译时,会出现以下错误:

dcmdata.lib(dcuid.obj) : error LNK2019: unresolved external symbol _Netbios@4 referenced in function "unsigned char * __cdecl getMACAddress(unsigned char * const)" (?getMACAddress@@YAPAEQAE@Z)

此错误似乎很常见,但以下解决方案均不适合我:

    DCMTK论坛的
  1. FAQ#27another post:建议使用特定的lib文件顺序。我的包含文件的顺序如下(我也尝试了相反的顺序,但它不起作用):

    enter image description here

  2. 所有这一切都行不通。 事实上,我不确定应该包含哪些lib文件?如何决定?

    我还在其他库目录下包含“C:\ Program Files \ DCMTK \ lib”,在项目属性中的其他包含目录下包含“C:\ Program Files \ DCMTK \ include”。

      stackoverflow上的
    1. Another similar question尚未得到解答。评论建议通过禁用DCMTK_OVERWRITE_WIN32_COMPILER_FLAGS重新运行CMake。我没有这样做,因为DCMTK help page说不要禁用它,除非你真的知道你在做什么。
    2. 有人可以指导吗?

5 个答案:

答案 0 :(得分:0)

NetBios功能驻留在NETAPI32.LIB中,因此您可以尝试将NetAPI32.lib(位于列表中)移动到该列表的顶部。

答案 1 :(得分:0)

不确定您使用的是哪个版本的DCMTK,但对于当前的开发快照,您需要以下标准库(在Windows上):“ws2_32 netapi32 wsock32”。此信息可在DCMTK的CMake文件中找到。顺便说一下,你似乎没有为你的项目使用CMake,对吗?

答案 2 :(得分:0)

我认为你将dcmsign.lib拼错为dcmsig.lib。

如果更改不能解决问题,我会根据您链接的支持页面建议以下顺序:     NetAPI32.lib     WSock32.lib     ofstd.lib     oflog.lib     dcmdata.lib     dcmsign.lib     dcmnet.lib     dcmsr.lib     dcmqrdb.lib     dcmtls.lib     dcmwlm.lib     dcmimgle.lib     dcmpstat.lib     dcmjpls.lib     dcmjpeg.lib     dcmimage.lib     ijg16.lib     ijg12.lib     ijg8.lib

我认为在这个列表中,每个库都必须在它依赖的所有库之后。

答案 3 :(得分:0)

检查你的.lib和vs平台是否相同,例如x64的lib,那么你的vs平台必须是x64。

答案 4 :(得分:0)

我有同样的错误。您可以转到项目属性->链接器->输入->其他依赖关系->编辑->在所有其他库之前添加这两个库-(netapi32.lib,wsock32.lib)。这为我解决了错误。