是否可以将c ++ / cli dll与静态vc ++ lib链接起来

时间:2011-12-14 17:50:41

标签: visual-c++ mfc c++-cli linker-errors

我得到了c ++ / cli dll链接到vc ++ dll,但是当使用静态版本的vc ++ lib进行尝试时,会出现一堆链接器错误。我想使用静态,所以我不必将所有其他vc ++ dll文件复制到我的主c#项目中,该项目使用c ++ / cli dll。

vc ++库具有以下属性:
*内置vs2008
*静态库
*在静态库中使用MFC
*没有公共语言运行时支持

c ++ / cli库具有以下属性:
*内置vs2010
*动态图书馆
*在共享DLL中使用MFC
*公共语言运行时支持
* linker->输入包含vc ++ lib文件

我在vs2010中构建它之后尝试将vc ++ lib链接起来,但这没有帮助。

所以我得到了来自nafxcwd.lib的90个LNK2005错误:

1> nafxcwd.lib(dlgprop.obj):错误LNK2005:已在mfc100d中定义的“public:struct _PROPSHEETPAGEA& __thiscall CPropertyPage :: GetPSP(void)”(?GetPSP @ CPropertyPage @@ QAEAAU_PROPSHEETPAGEA @@ XZ)。 LIB(mfc100d.dll)

然后像这样的30个左右: 1> libcmtd.lib(sprintf.obj):错误LNK2005:_sprintf已在msvcrtd.lib中定义(MSVCR100D.dll)

然后三个LNK4098警告:

LINK:警告LNK4098:defaultlib'msvcrtd.lib'与其他lib的使用冲突;使用/ NODEFAULTLIB:库 1> LINK:警告LNK4098:defaultlib'nafxcwd.lib'与使用其他库冲突;使用/ NODEFAULTLIB:库 1> LINK:警告LNK4098:defaultlib'libcmtd.lib'与使用其他库冲突;使用/ NODEFAULTLIB:库

然后我得到了最后一个错误: libcmtd.lib(crt0.obj):错误LNK2019:函数_ _tmainCRTStartup

中未解析的外部符号主要引用

我在msdn上查找了LNK4098警告,解决方案是将冲突库添加到链接器输入设置中的IgnoreSpecific Default库条目,但这没有帮助。

谢谢,
亚历

1 个答案:

答案 0 :(得分:2)

你不能用不同版本的VS编译器链接(C ++)库(有时候它可能会意外地工作,但你以后通常会很难诊断崩溃)。此外,您的错误似乎是选择不同CRT配置(单/多线程,调试/发布等)的典型错误。