这不是一个新问题,但解决方案对我没有用。我想用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)
此错误似乎很常见,但以下解决方案均不适合我:
所有这一切都行不通。事实上,我不确定应该包含哪些lib文件?怎么决定?
我还在其他库目录下包含“C:\ Program Files \ DCMTK \ lib”,在项目属性中包含其他包含目录下的“C:\ Program Files \ DCMTK \ include”。
有人可以指导吗?
NetBios函数驻留在NETAPI32.LIB中,因此您可以尝试将NetAPI32.lib(位于列表中)移动到该列表的顶部。
不确定您使用的是哪个版本的DCMTK,但对于当前的开发快照,您需要以下标准库(在Windows上):“ws2_32 netapi32 wsock32”。此信息可在DCMTK的CMake文件中找到。顺便说一句,你似乎没有为你的项目使用CMake,对吗?
我认为你将dcmsign.lib拼错为dcmsig.lib。
如果更改不能解决问题,我建议根据您链接到的支持页面建议以下顺序:NetAPI32.lib oflog.lib的stock.lib的WSock32.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
我认为在这个列表中,每个库都必须在它依赖的所有库之后。
检查你的.lib和vs平台是否相同,例如x64的lib,那么你的vs平台必须是x64。
我有同样的错误。您可以转到项目属性 - >链接器 - >输入 - >其他依赖项 - >编辑 - >在所有其他库之前添加这两个库 - (netapi32.lib,wsock32.lib)。这解决了我的错误。