在使用Microsoft Visual Studio ’08编译libpng时,如何避免“错误LNK2005:”(已经定义了stdlib函数)?
(为什么我要尝试这样做:我没有运气在Windows上使用libpng的预构建二进制文件(尽管经过了数小时的试验和错误),因此我现在正在尝试自己编译它。我发现这个有用的博客关于这个的post ,完成了Microsoft Visual Studio 2008项目文件,但遗憾的是仍然无法使用它。)
它在链接到此处找到的zlib二进制文件时成功编译,但在尝试将其链接到测试文件时,我收到以下内容:
C:\ Documents and Settings \ Administrator \ My Documents> cl“C:\ Documents and Settin gs \ Administrator \ My Documents \ test.c“”C:\ Documents and Settings \ Administrator \ M. y Documents \ libpng.lib“-I”C:\ Documents and Settings \ Administrator \ My Documents \ include“ Microsoft(R)32位C / C ++优化编译器版本15.00.30729.01 for 80x86 版权所有(C)Microsoft Corporation。 版权所有。 test.c的 Microsoft(R)增量链接器版本9.00.30729.01 版权所有(C)Microsoft Corporation。 版权所有。 /out:test.exe test.obj “C:\ Documents and Settings \ Administrator \ My Documents \ libpng.lib” MSVCRTD.lib(MSVCR90D.dll):错误LNK2005:_abort已在LIBCMT.lib中定义( abort.obj) MSVCRTD.lib(MSVCR90D.dll):错误LNK2005:_fread已在LIBCMT.lib中定义( fread.obj) MSVCRTD.lib(MSVCR90D.dll):错误LNK2005:_malloc已在LIBCMT.lib中定义 (malloc.obj) MSVCRTD.lib(MSVCR90D.dll):错误LNK2005:_free已在LIBCMT.lib中定义(f ree.obj) MSVCRTD.lib(MSVCR90D.dll):错误LNK2005:___ iob_func已在LIBCMT中定义 的.lib(_file.obj) 链接:警告LNK4098:defaultlib'MSVCRTD'与使用其他库冲突; ü se / NODEFAULTLIB:库 test.exe:致命错误LNK1169:找到一个或多个多重定义的符号
任何人都可以关心如何解决这些错误?
问题是两个项目中的一个使用multithreadingDLL,而另一个项目在项目属性 – >配置属性 – > C / C ++ – >代码生成中使用multithreading (不包含DLL)。
好几次发生在我身上。
确保即使对于发布版本以及每种可能的组合(调试,非调试等),“同步”该设置