2

I'm trying to understand how to program based on Dcmtk libraries. I'm pretty new and naive in C++ programming(I have learned the basics of C++ and understand them) so it might just be an easy question for you guys. I have found this following code, I understand what it is doing, but I'm unable to link all the libraries required for this code to compile successfully. Please instruct how I can understand how to link all the sources and libraries in order make a Dcmtk program in C++. I'm trying to run this program in Visual Studio and it's dcmtk 3.6.0.

#include "dcmtk/config/osconfig.h"
#include "dcmtk/dcmimgle/dcmimage.h"

int main(int argc, char *argv[])
{
    OFLog::configure(OFLogger::INFO_LOG_LEVEL);

    DicomImage *image = new DicomImage("mf_image.dcm", CIF_UsePartialAccessToPixelData, 0, 10 /* fcount */); 

    if (image->getStatus() == EIS_Normal)
    {
        do {
            DCMIMGLE_INFO("processing frame " << image->getFirstFrame() + 1 << " to "
                                              << image->getFirstFrame() + image->getFrameCount());
        } while (image->processNextFrames());
    }

    delete image;

    return 0;
}

Include directories(I just guessed them):

D:\dcmtk-3.6.0\dcmdata\include;D:\dcmtk-3.6.0\ofstd\include;D:\dcmtk-3.6.0\oflog\include;D:\dcmtk-3.6.0\dcmimgle\include;D:\dcmtk-3.6.0\build\include;$(IncludePath)

Library Diretories(I just guessed them)

D:\dcmtk-3.6.0\build\dcmimgle\libsrc\Debug;D:\dcmtk-3.6.0\build\dcmdata\libsrc\Debug;D:\dcmtk-3.6.0\build\ofstd\libsrc\Debug;D:\dcmtk-3.6.0\build\oflog\libsrc\Debug;D:\dcmtk-3.6.0\build\dcmimage\libsrc\Debug;$(LibraryPath)

Source directories:(I just guessed them)

D:\dcmtk-3.6.0\dcmdata\libsrc;D:\dcmtk-3.6.0\dcmimage\libsrc;D:\dcmtk-3.6.0\dcmimgle\libsrc;D:\dcmtk-3.6.0\ofstd\libsrc;$(SourcePath)

The inputs in the linker are the following:

dcmimage.lib;dcmimgle.lib;dcmdata.lib;oflog.lib;ofstd.lib;netapi32.lib;wsock32.lib;advapi32.lib

Excluded library: msvcrt.lib

Errors(These errors happen when I don't add any Additional Dependencies in the input of the Linker of Visual Studio. When I add some Additional Dependencies, like dcmdata.lib, oflog.lib, ofstd.lib there are plenty of errors, so much that I cannot post them here due to lack of space.):

    Error   34  error LNK2005: "public: void __thiscall std::basic_ostream<char,struct std::char_traits<char> >::_Osfx(void)" (?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ) already defined in dcmimage.lib(diyp2img.obj)    C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\msvcprtd.lib(MSVCP100D.dll)
Error   23  error LNK2005: "public: void __thiscall std::basic_ios<char,struct std::char_traits<char> >::setstate(int,bool)" (?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z) already defined in dcmimage.lib(diyp2img.obj)   C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\msvcprtd.lib(MSVCP100D.dll)
Error   20  error LNK2005: "public: void __thiscall std::_Container_base12::_Orphan_all(void)" (?_Orphan_all@_Container_base12@std@@QAEXXZ) already defined in dcmimage.lib(diyp2img.obj)   C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\msvcprtd.lib(MSVCP100D.dll)
Error   6   error LNK2005: "public: virtual __thiscall std::basic_streambuf<char,struct std::char_traits<char> >::~basic_streambuf<char,struct std::char_traits<char> >(void)" (??1?$basic_streambuf@DU?$char_traits@D@std@@@std@@UAE@XZ) already defined in dcmimage.lib(diyp2img.obj) C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\msvcprtd.lib(MSVCP100D.dll)
Error   3   error LNK2005: "public: virtual __thiscall std::basic_ostream<char,struct std::char_traits<char> >::~basic_ostream<char,struct std::char_traits<char> >(void)" (??1?$basic_ostream@DU?$char_traits@D@std@@@std@@UAE@XZ) already defined in dcmimage.lib(diyp2img.obj)   C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\msvcprtd.lib(MSVCP100D.dll)
Error   2   error LNK2005: "public: virtual __thiscall std::basic_ios<char,struct std::char_traits<char> >::~basic_ios<char,struct std::char_traits<char> >(void)" (??1?$basic_ios@DU?$char_traits@D@std@@@std@@UAE@XZ) already defined in dcmimage.lib(diyp2img.obj)   C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\msvcprtd.lib(MSVCP100D.dll)
Error   37  error LNK2005: "public: static void __cdecl std::ios_base::_Addstd(class std::ios_base *)" (?_Addstd@ios_base@std@@SAXPAV12@@Z) already defined in msvcprtd.lib(MSVCP100D.dll)  C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\libcpmtd.lib(ios.obj)
Error   42  error LNK2005: "public: static void __cdecl std::_Locinfo::_Locinfo_dtor(class std::_Locinfo *)" (?_Locinfo_dtor@_Locinfo@std@@SAXPAV12@@Z) already defined in msvcprtd.lib(MSVCP100D.dll)  C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\libcpmtd.lib(locale0.obj)
Error   41  error LNK2005: "public: static void __cdecl std::_Locinfo::_Locinfo_ctor(class std::_Locinfo *,char const *)" (?_Locinfo_ctor@_Locinfo@std@@SAXPAV12@PBD@Z) already defined in msvcprtd.lib(MSVCP100D.dll)  C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\libcpmtd.lib(locale0.obj)
Error   29  error LNK2005: "public: int __thiscall std::ios_base::flags(void)const " (?flags@ios_base@std@@QBEHXZ) already defined in dcmimage.lib(diyp2img.obj)    C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\msvcprtd.lib(MSVCP100D.dll)
Error   26  error LNK2005: "public: int __thiscall std::basic_streambuf<char,struct std::char_traits<char> >::sputc(char)" (?sputc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHD@Z) already defined in dcmimage.lib(diyp2img.obj)    C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\msvcprtd.lib(MSVCP100D.dll)
Error   35  error LNK2005: "public: class std::locale::facet * __thiscall std::locale::facet::_Decref(void)" (?_Decref@facet@locale@std@@QAEPAV123@XZ) already defined in dcmimage.lib(diyp2img.obj)    C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\msvcprtd.lib(MSVCP100D.dll)
Error   27  error LNK2005: "public: class std::basic_streambuf<char,struct std::char_traits<char> > * __thiscall std::basic_ios<char,struct std::char_traits<char> >::rdbuf(void)const " (?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@XZ) already defined in dcmimage.lib(diyp2img.obj)   C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\msvcprtd.lib(MSVCP100D.dll)
Error   32  error LNK2005: "public: class std::basic_ostream<char,struct std::char_traits<char> > * __thiscall std::basic_ios<char,struct std::char_traits<char> >::tie(void)const " (?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_ostream@DU?$char_traits@D@std@@@2@XZ) already defined in dcmimage.lib(diyp2img.obj)   C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\msvcprtd.lib(MSVCP100D.dll)
Error   1   error LNK2005: "public: class std::basic_ostream<char,struct std::char_traits<char> > & __thiscall std::basic_ostream<char,struct std::char_traits<char> >::operator<<(unsigned long)" (??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@K@Z) already defined in dcmimage.lib(dicoimg.obj)  C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\msvcprtd.lib(MSVCP100D.dll)
Error   31  error LNK2005: "public: class std::basic_ostream<char,struct std::char_traits<char> > & __thiscall std::basic_ostream<char,struct std::char_traits<char> >::flush(void)" (?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@XZ) already defined in dcmimage.lib(diyp2img.obj)    C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\msvcprtd.lib(MSVCP100D.dll)
Error   28  error LNK2005: "public: char __thiscall std::basic_ios<char,struct std::char_traits<char> >::fill(void)const " (?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDXZ) already defined in dcmimage.lib(diyp2img.obj)    C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\msvcprtd.lib(MSVCP100D.dll)
Error   33  error LNK2005: "public: bool __thiscall std::ios_base::good(void)const " (?good@ios_base@std@@QBE_NXZ) already defined in dcmimage.lib(diyp2img.obj)    C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\msvcprtd.lib(MSVCP100D.dll)
Error   4   error LNK2005: "public: __thiscall std::basic_ostream<char,struct std::char_traits<char> >::basic_ostream<char,struct std::char_traits<char> >(class std::basic_streambuf<char,struct std::char_traits<char> > *,bool)" (??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z) already defined in dcmimage.lib(diyp2img.obj) C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\msvcprtd.lib(MSVCP100D.dll)
Error   44  error LNK2005: "public: __thiscall std::_Lockit::~_Lockit(void)" (??1_Lockit@std@@QAE@XZ) already defined in msvcprtd.lib(MSVCP100D.dll)    C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\libcpmtd.lib(xlock.obj)
Error   43  error LNK2005: "public: __thiscall std::_Lockit::_Lockit(int)" (??0_Lockit@std@@QAE@H@Z) already defined in msvcprtd.lib(MSVCP100D.dll) C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\libcpmtd.lib(xlock.obj)
Error   19  error LNK2005: "public: __thiscall std::_Container_base12::~_Container_base12(void)" (??1_Container_base12@std@@QAE@XZ) already defined in dcmimage.lib(diyp2img.obj)   C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\msvcprtd.lib(MSVCP100D.dll)
Error   22  error LNK2005: "public: __thiscall std::_Container_base12::_Container_base12(void)" (??0_Container_base12@std@@QAE@XZ) already defined in dcmimage.lib(diyp2img.obj)    C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\msvcprtd.lib(MSVCP100D.dll)
Error   30  error LNK2005: "public: __int64 __thiscall std::ios_base::width(void)const " (?width@ios_base@std@@QBE_JXZ) already defined in dcmimage.lib(diyp2img.obj)   C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\msvcprtd.lib(MSVCP100D.dll)
Error   24  error LNK2005: "public: __int64 __thiscall std::ios_base::width(__int64)" (?width@ios_base@std@@QAE_J_J@Z) already defined in dcmimage.lib(diyp2img.obj)    C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\msvcprtd.lib(MSVCP100D.dll)
Error   25  error LNK2005: "public: __int64 __thiscall std::basic_streambuf<char,struct std::char_traits<char> >::sputn(char const *,__int64)" (?sputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE_JPBD_J@Z) already defined in dcmimage.lib(diyp2img.obj)   C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\msvcprtd.lib(MSVCP100D.dll)
Error   12  error LNK2005: "protected: void __thiscall std::basic_streambuf<char,struct std::char_traits<char> >::setp(char *,char *,char *)" (?setp@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXPAD00@Z) already defined in dcmimage.lib(diyp2img.obj)  C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\msvcprtd.lib(MSVCP100D.dll)
Error   9   error LNK2005: "protected: void __thiscall std::basic_streambuf<char,struct std::char_traits<char> >::setp(char *,char *)" (?setp@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXPAD0@Z) already defined in dcmimage.lib(diyp2img.obj)  C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\msvcprtd.lib(MSVCP100D.dll)
Error   8   error LNK2005: "protected: void __thiscall std::basic_streambuf<char,struct std::char_traits<char> >::setg(char *,char *,char *)" (?setg@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXPAD00@Z) already defined in dcmimage.lib(diyp2img.obj)  C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\msvcprtd.lib(MSVCP100D.dll)
Error   18  error LNK2005: "protected: void __thiscall std::basic_streambuf<char,struct std::char_traits<char> >::pbump(int)" (?pbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXH@Z) already defined in dcmimage.lib(diyp2img.obj) C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\msvcprtd.lib(MSVCP100D.dll)
Error   16  error LNK2005: "protected: void __thiscall std::basic_streambuf<char,struct std::char_traits<char> >::gbump(int)" (?gbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXH@Z) already defined in dcmimage.lib(diyp2img.obj) C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\msvcprtd.lib(MSVCP100D.dll)
Error   15  error LNK2005: "protected: char * __thiscall std::basic_streambuf<char,struct std::char_traits<char> >::pptr(void)const " (?pptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ) already defined in dcmimage.lib(diyp2img.obj) C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\msvcprtd.lib(MSVCP100D.dll)
Error   13  error LNK2005: "protected: char * __thiscall std::basic_streambuf<char,struct std::char_traits<char> >::pbase(void)const " (?pbase@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ) already defined in dcmimage.lib(diyp2img.obj)   C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\msvcprtd.lib(MSVCP100D.dll)
Error   7   error LNK2005: "protected: char * __thiscall std::basic_streambuf<char,struct std::char_traits<char> >::gptr(void)const " (?gptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ) already defined in dcmimage.lib(diyp2img.obj) C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\msvcprtd.lib(MSVCP100D.dll)
Error   14  error LNK2005: "protected: char * __thiscall std::basic_streambuf<char,struct std::char_traits<char> >::epptr(void)const " (?epptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ) already defined in dcmimage.lib(diyp2img.obj)   C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\msvcprtd.lib(MSVCP100D.dll)
Error   17  error LNK2005: "protected: char * __thiscall std::basic_streambuf<char,struct std::char_traits<char> >::egptr(void)const " (?egptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ) already defined in dcmimage.lib(diyp2img.obj)   C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\msvcprtd.lib(MSVCP100D.dll)
Error   10  error LNK2005: "protected: char * __thiscall std::basic_streambuf<char,struct std::char_traits<char> >::eback(void)const " (?eback@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ) already defined in dcmimage.lib(diyp2img.obj)   C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\msvcprtd.lib(MSVCP100D.dll)
Error   11  error LNK2005: "protected: char * __thiscall std::basic_streambuf<char,struct std::char_traits<char> >::_Pninc(void)" (?_Pninc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEPADXZ) already defined in dcmimage.lib(diyp2img.obj)   C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\msvcprtd.lib(MSVCP100D.dll)
Error   21  error LNK2005: "protected: __thiscall std::basic_streambuf<char,struct std::char_traits<char> >::basic_streambuf<char,struct std::char_traits<char> >(void)" (??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAE@XZ) already defined in dcmimage.lib(diyp2img.obj)   C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\msvcprtd.lib(MSVCP100D.dll)
Error   5   error LNK2005: "protected: __thiscall std::basic_ios<char,struct std::char_traits<char> >::basic_ios<char,struct std::char_traits<char> >(void)" (??0?$basic_ios@DU?$char_traits@D@std@@@std@@IAE@XZ) already defined in dcmimage.lib(diyp2img.obj) C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\msvcprtd.lib(MSVCP100D.dll)
Error   38  error LNK2005: "private: static void __cdecl std::locale::facet::_Facet_Register(class std::locale::facet *)" (?_Facet_Register@facet@locale@std@@CAXPAV123@@Z) already defined in msvcprtd.lib(locale0_implib.obj) C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\libcpmtd.lib(locale0.obj)
Error   36  error LNK2005: "private: static void __cdecl std::ios_base::_Ios_base_dtor(class std::ios_base *)" (?_Ios_base_dtor@ios_base@std@@CAXPAV12@@Z) already defined in msvcprtd.lib(MSVCP100D.dll)   C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\libcpmtd.lib(ios.obj)
Error   40  error LNK2005: "private: static class std::locale::_Locimp * __cdecl std::locale::_Init(void)" (?_Init@locale@std@@CAPAV_Locimp@12@XZ) already defined in msvcprtd.lib(MSVCP100D.dll)   C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\libcpmtd.lib(locale0.obj)
Error   39  error LNK2005: "private: static class std::locale::_Locimp * __cdecl std::locale::_Getgloballocale(void)" (?_Getgloballocale@locale@std@@CAPAV_Locimp@12@XZ) already defined in msvcprtd.lib(MSVCP100D.dll) C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\AccessMultipleFile\libcpmtd.lib(locale0.obj)
Error   50  error LNK1169: one or more multiply defined symbols found   C:\Users\fibne-mozher\Documents\Visual Studio 2010\Projects\AccessMultipleFile\Debug\AccessMultipleFile.exe 1
Amit Joshi
  • 15,448
  • 21
  • 77
  • 141
the_naive
  • 2,936
  • 6
  • 39
  • 68

2 Answers2

1

In Visual Studio you can specify additional libraries to link in under the project's Properties - Configuration Properties - Linker - Input - Additional Dependencies.

This DCMTK FAQ details the libraries that should be linked in, including their order.

Nate Hekman
  • 6,507
  • 27
  • 30
  • I tried to follow that but still there is error. Please see the update errors. – the_naive Feb 26 '13 at 10:51
  • The new errors you just posted are saying that some symbols are defined twice. Try putting msvcrt.lib in the list of EXCLUDED libraries. – Nate Hekman Feb 26 '13 at 13:57
  • You mean I should add msvcrt.lib in the section "Ignore Specific Default Libraries", right? I did so, and I've updated the new errors. – the_naive Feb 26 '13 at 14:07
  • 1
    The current set of errors are still indicating that some symbols are defined in more than one library. It's tough to troubleshoot over this kind of forum. It looks like the dcmtk libraries are including some STL libraries, which you are then linking as well (likely as default libraries). In general, your job is to identify the library and exclude it from the defaults. Sorry I can't be more specific. – Nate Hekman Feb 26 '13 at 15:57
0

I think you are not linking the libraries. Try adding this to the top of your sourcefile

#pragma comment(lib, "dcmdata.lib") 

#pragma comment(lib, "oflog.lib") 

#pragma comment(lib, "ofstd.lib") 
John Bandela
  • 2,416
  • 12
  • 19