Как правильно связать Dcmtk с Qt для Linux? - PullRequest
0 голосов
/ 27 августа 2018

Моя цель - открыть файлы Dicom и конвертировать их в cv :: Mat для обработки их с помощью Opencv.

Я скомпилировал dcmtk 3.6.3 в ubuntu 18.4.1 и попытался связать его с Qt 5.11.1 с Qt Creator 4.6.2, но не смог этого сделать.

# pro file
QT       += core
QT       -= gui

TARGET = DcmtkTesting
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app


DCMTK_PREFIX = "/home/ismail/dcmtk363"
DCMTK_LIBS_PREFIX=$$DCMTK_PREFIX"/lib"
DCMTK_INCLUDE=$$DCMTK_PREFIX"/include"
INCLUDEPATH+=$$DCMTK_INCLUDE

LIBS += -L$$DCMTK_LIBS_PREFIX

SOURCES += main.cpp

и для основного: #include

#include "dcmtk/config/osconfig.h"
#include "dcmtk/dcmdata/dctk.h"
#include <dcmtk/dcmimgle/dcmimage.h>

#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    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
        cout << "Error: cannot load DICOM image (" <<   DicomImage::getString(image->getStatus()) << ")" << endl;
    }
    delete image;

    return a.exec();
}

и я получил эти ошибки:

enter image description here

1 Ответ

0 голосов
/ 28 августа 2018

Ошибка указывает, что компоновщик не смог найти символы (методы), предоставленные библиотекой. В своем файле .pro вы указали компоновщику каталог, в котором находится ваша библиотека, но забыли указать, какая библиотека должна быть связана.

Таким образом, вы должны соответственно изменить строку LIBS +=..., например ::

LIBS += -L$$DCMTK_LIBS_PREFIX -ldcmtk

Поскольку я не знаю фактического названия библиотеки, я использую dcmtk в моем примере. Возможно, вам придется принять его в соответствии с вашей средой сборки. Просто убедитесь, что у вас есть -l (нижний регистр L), сразу за которым следует имя библиотеки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...