【发布时间】:2012-01-20 12:12:48
【问题描述】:
我让 c++/cli dll 链接到 vc++ dll,但是在尝试使用 vc++ lib 的静态版本时,出现了一堆链接器错误。我想使用静态,所以我不必将所有其他 vc++ dll 文件复制到我的主 c# 项目中,该项目使用 c++/cli dll。
vc++ 库具有以下属性:
*内置于 vs2008
*静态库
*在静态库中使用 MFC
*没有公共语言运行时支持
c++/cli 库具有以下属性:
*内置于 vs2010
*动态库
*在共享 DLL 中使用 MFC
*通用语言运行时支持
*linker->input 包含 vc++ lib 文件
我尝试在 vs2010 中构建后链接 vc++ 库,但没有帮助。
所以我从 nafxcwd.lib 中得到了 90 个类似的 LNK2005 错误:
1>nafxcwd.lib(dlgprop.obj) : 错误 LNK2005: "public: struct _PROPSHEETPAGEA & __thiscall CPropertyPage::GetPSP(void)" (?GetPSP@CPropertyPage@@QAEAAU_PROPSHEETPAGEA@@XZ) 已在 mfc100d.lib 中定义(mfc100d.dll)
然后喜欢 30 个左右: 1>libcmtd.lib(sprintf.obj) : 错误 LNK2005: _sprintf 已在 msvcrtd.lib(MSVCR100D.dll) 中定义
然后是三个 LNK4098 警告:
LINK:警告 LNK4098:defaultlib 'msvcrtd.lib' 与其他库的使用冲突;使用 /NODEFAULTLIB:library 1>LINK : 警告 LNK4098: defaultlib 'nafxcwd.lib' 与其他库的使用冲突;使用 /NODEFAULTLIB:library 1>LINK : 警告 LNK4098: defaultlib 'libcmtd.lib' 与其他库的使用冲突;使用 /NODEFAULTLIB:library
然后我得到最后一个错误: libcmtd.lib(crt0.obj) : error LNK2019: unresolved external symbol main referenced in function __tmainCRTStartup
我在 msdn 上查找了 LNK4098 警告,解决方案是将冲突的库添加到链接器输入设置中的 IgnoreSpecific Default libraries 条目中,但这没有帮助。
谢谢,
亚历克斯
【问题讨论】:
-
试试这个:stackoverflow.com/questions/5127522/… 在你的那将是'libcmtd.lib'
-
好的,我将 libcmtd.lib 和 nafxcwd.lib 添加到忽略特定的默认库中,这些链接器错误消失了,但后来我得到了这些与 vc++ 库有关的错误,如下所示:1 >GuiD.lib(TreePropSheet.obj) : error LNK2001: unresolved external symbol "public: static struct CRuntimeClass const CPropertySheet::classCPropertySheet" (?classCPropertySheet@CPropertySheet@@2UCRuntimeClass@@B)
标签: visual-c++ mfc c++-cli linker-errors