2016-11-23 54 views
0

これは新しい質問ではありませんが、解決策は私にとっては効果がありません。私はC++を使ってdicomファイルを読みたいと思っています。私はVS 2013コミュニティ版の32ビットWindows PCを持っています。Visual StudioでDCMTKを使用した場合のリンカエラーLNK2019

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 [email protected] referenced in function "unsigned char * __cdecl getMACAddress(unsigned char * const)" ([email protected]@[email protected]) 

このエラーは、一般的のようですが、次のソリューションのどれも私のために働くん:

  1. FAQ#27とDCMTKフォーラムのanother post

    :それが含まれるLIBファイルの特定の順序を使用することを提案しています。このすべてがうまくいかない

    enter image description here

:ファイルを含めて私の順番は(私も逆の順序を試みたが、それはうまくいきませんでした)次のとおりです。 実際、どのlibファイルが含まれるはずですか?それをどうやって決めるの?

また、追加のライブラリディレクトリの下に「C:¥Program Files¥DCMTK¥lib」とプロジェクトプロパティの追加のインクルードディレクトリの下に「C:¥Program Files¥DCMTK¥include」が含まれています。

  1. Another similar question at stackoverflowには答えられていません。 DCMTK_OVERWRITE_WIN32_COMPILER_FLAGSを無効にしてCMakeを再実行することをお勧めします。 DCMTK help pageはあなたが何をしているのか本当に分かっていない限り、これを無効にしないと言っています。

ガイドできますか?

答えて

0

NetBios関数はNETAPI32.LIBに存在するため、NetAPI32.lib(リストにある)をそのリストの先頭に移動できます。

+0

私はNETAPI32.libを先頭に移動し、リストの残りの部分は同じにしても動作しません:( – Ruchir

0

使用するDCMTKのバージョンはわかりませんが、現在の開発スナップショットでは、次の標準ライブラリ(Windowsの場合): "ws2_32 netapi32 wsock32"が必要です。この情報はDCMTKのCMakeファイルにあります。ちなみに、CMakeをプロジェクトに使用していないようですね。

+0

私はDCMTK 3.6.0を使用していますが、CMakeを使用していますが、ws2_32も含めて試しました。 – Ruchir

0

あなたはdcmsig.libとしてdcmsign.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

私はこのリストには、各ライブラリは、それが依存するすべてのライブラリの後に来るように持っていると思います。

+0

実際、私はそのようなファイルdcmsign.libを持っていません。代わりに私が言及したdcmdsig.libを持っています。私もあなたが提案した順序を試して、@ J。Riesmeierによって提案されたようにws2_32.libを含めましたが、それでも動作しません。私はこのポストに従った注文:http://stackoverflow.com/a/798086/ 5022962しかし、これは他の方法(あなたの言うことに比べて)を示唆しているようです。どちらが正しいかわかりませんので逆の順序も試しましたが、うまくいきません – Ruchir

+1

はい、ライブラリnameは実際には "dcmdsig.lib"です。つまり、namと同じではありません。コマンドラインツール "dcmsign"との競合のために、DCMTKのモジュールディレクトリの一部を削除しました。ライブラリのオーダーに関して:私が知る限り、Visual Studioはgcc(またはそのリンカー)のようにそれほど気にならない。 @ruchirリンカの冗長モードを既に有効にしましたか? –

+0

@ J.Riesmeier私は冗長モードを有効にしました。今私は3000行以上の出力を見る。これを使用してエラーの原因を突き止めることはできますか? – Ruchir

0

あなたの.libとvsプラットフォームが同じであれば、そのようなlib、x64のlib、そしてあなたのvsプラットフォームがx64であることを確認してください。

+0

ええ、両方のプラットフォームが同じです。 – Ruchir

関連する問題