1

这不是一个新问题,但解决方案对我不起作用。我想使用 C++ 读取 dicom 文件。我有带有 VS 2013 社区版的 32 位 Windows PC。

这篇文章和其中的其他答案建议使用 DCMTK。我安装了 DCMTK(使用 CMake,然后使用 VS)并使用本文中提供的指南和链接将其配置为与 VS 一起使用。然后我写了一个简单的测试程序并尝试编译它:

#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)

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

  1. FAQ#27和DCMTK 论坛的另一篇文章:它建议使用特定的 lib 文件顺序来包含。我包含文件的顺序如下(我也尝试了相反的顺序,但没有奏效):

    在此处输入图像描述

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

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

  1. stackoverflow 上的另一个类似问题尚未得到解答。评论建议通过禁用 DCMTK_OVERWRITE_WIN32_COMPILER_FLAGS 重新运行 CMake。我没有这样做是因为DCMTK 帮助页面说不要禁用它,除非你真的知道你在做什么。

有人可以指导吗?

4

5 回答 5

0

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

于 2016-11-23T09:48:14.800 回答
0

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

于 2016-11-23T09:07:42.913 回答
0

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

于 2017-01-08T08:17:50.827 回答
0

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

于 2019-02-19T06:47:28.657 回答
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

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

于 2016-11-23T10:02:28.953 回答