在共享dll中都是运行正常,不知道为什么用静态库链接,就报错了。各位大牛,小弟谢谢了。哦,我用的是Vs20081>msvcrtd.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) already defined in libcmtd.lib(typinfo.obj)
1>msvcrtd.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) already defined in libcmtd.lib(typinfo.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: _fclose already defined in libcmtd.lib(fclose.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: _fflush already defined in libcmtd.lib(fflush.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: __invalid_parameter already defined in libcmtd.lib(invarg.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: __CrtDbgReportW already defined in libcmtd.lib(dbgrptw.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: "public: virtual __thiscall std::exception::~exception(void)" (??1exception@std@@UAE@XZ) already defined in libcmtd.lib(stdexcpt.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: "public: __thiscall std::exception::exception(void)" (??0exception@std@@QAE@XZ) already defined in libcmtd.lib(stdexcpt.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: "public: __thiscall std::exception::exception(class std::exception const &)" (??0exception@std@@QAE@ABV01@@Z) already defined in libcmtd.lib(stdexcpt.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: "public: __thiscall std::exception::exception(char const * const &)" (??0exception@std@@QAE@ABQBD@Z) already defined in libcmtd.lib(stdexcpt.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: _memmove_s already defined in libcmtd.lib(memmove_s.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: _atoi already defined in libcmtd.lib(atox.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: __vsnprintf_s already defined in libcmtd.lib(vsnprnc.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: _strtol already defined in libcmtd.lib(strtol.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: _isalpha already defined in libcmtd.lib(_ctype.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: _isalnum already defined in libcmtd.lib(_ctype.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: _isspace already defined in libcmtd.lib(_ctype.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: _strncmp already defined in libcmtd.lib(strncmp.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: _strchr already defined in libcmtd.lib(strchr.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: _tolower already defined in libcmtd.lib(tolower.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: _memmove already defined in libcmtd.lib(memmove.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: _free already defined in libcmtd.lib(dbgfree.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: _malloc already defined in libcmtd.lib(dbgmalloc.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: _realloc already defined in libcmtd.lib(dbgrealloc.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: __strnicmp already defined in libcmtd.lib(strnicmp.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: _calloc already defined in libcmtd.lib(dbgcalloc.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: _sprintf already defined in libcmtd.lib(sprintf.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: _printf already defined in libcmtd.lib(printf.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: _isprint already defined in libcmtd.lib(_ctype.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: _exit already defined in libcmtd.lib(crt0dat.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: ___iob_func already defined in libcmtd.lib(_file.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: _getenv already defined in libcmtd.lib(getenv.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: _abort already defined in libcmtd.lib(abort.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: __gmtime64 already defined in libcmtd.lib(gmtime64.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: _vsprintf already defined in libcmtd.lib(vsprintf.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: _strrchr already defined in libcmtd.lib(strrchr.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: _isdigit already defined in libcmtd.lib(_ctype.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: __stricmp already defined in libcmtd.lib(stricmp.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: __errno already defined in libcmtd.lib(dosmap.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: _isupper already defined in libcmtd.lib(_ctype.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: __read already defined in libcmtd.lib(read.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: __write already defined in libcmtd.lib(write.obj)
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: __close already defined in libcmtd.lib(close.obj)

解决方案 »

  1.   

    静态链接的时候,你的程序和cximage库编译的时候要使用相同的code generation选项,比如都是 /md 或 /mt不能是一个/mt 一个/md
      

  2.   

    DEBUG为例 你编译CXIMAGE静态库的时候可能用的是MTD 而你的EXE可能用的MDd 这种情况会冲突 
    要不你就忽略库 libcmtd.lib 看
      

  3.   

    把cximage改成静态重编
    其中,png.lib等库也要改成静态重编一下
      

  4.   

    问题解决了, 把CxImageCrtDll这个工程编译成静态库, 然后加入到你自己工程里就行了, 一天了, 终于弄出来了
    #pragma comment(lib, "cximagecrtu.lib")