1

我下载并编译了 pdcurses。按照他们的文档的指示,我使用了:

nmake -f vcwin32.mak DEBUG=Y pdcurses.lib

我还构建了没有 DEBUG 标记的 pdcurses,因此我可以处于发布模式。

现在,我有一个项目,我想静态链接 pdcurses。我使用 MT 和 MTd 作为运行时库,在调试时链接来自 DEBUG 构建的 .lib 文件,在发布时链接其他 .lib 文件。

当我在发布模式下构建我的项目时,一切正常,但是当我尝试在调试上构建时,出现错误:

1>LIBCMT.lib(invarg.obj) : error LNK2005: "void __cdecl _invalid_parameter(unsigned short const *,unsigned short const *,unsigned short const *,unsigned int,unsigned int)" (?_invalid_parameter@@YAXPBG00II@Z) already defined in LIBCMTD.lib(invarg.obj)
1>LIBCMT.lib(invarg.obj) : error LNK2005: "void __cdecl _invoke_watson(unsigned short const *,unsigned short const *,unsigned short const *,unsigned int,unsigned int)" (?_invoke_watson@@YAXPBG00II@Z) already defined in LIBCMTD.lib(invarg.obj)
1>LIBCMT.lib(invarg.obj) : error LNK2005: __call_reportfault already defined in LIBCMTD.lib(invarg.obj)
1>LIBCMT.lib(invarg.obj) : error LNK2005: __get_invalid_parameter_handler already defined in LIBCMTD.lib(invarg.obj)
1>LIBCMT.lib(invarg.obj) : error LNK2005: __initp_misc_invarg already defined in LIBCMTD.lib(invarg.obj)
1>LIBCMT.lib(invarg.obj) : error LNK2005: __invalid_parameter already defined in LIBCMTD.lib(invarg.obj)
1>LIBCMT.lib(invarg.obj) : error LNK2005: __invoke_watson already defined in LIBCMTD.lib(invarg.obj)
1>LIBCMT.lib(invarg.obj) : error LNK2005: __set_invalid_parameter_handler already defined in LIBCMTD.lib(invarg.obj)
1>LIBCMT.lib(invarg.obj) : error LNK2005: ___pInvalidArgHandler already defined in LIBCMTD.lib(invarg.obj)
1>LINK : warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library

任何想法可能是什么问题?

4

1 回答 1

0

您正在链接到调试和发布静态运行时,不要这样做。如果您不知道是哪个库导致了问题,请参阅本指南以了解检测该问题的步骤。

于 2014-11-14T17:47:46.227 回答