【问题标题】:is it possible to link a c++/cli dll with a static vc++ lib是否可以将 c++/cli dll 与静态 vc++ lib 链接
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多