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

发布于 2024-12-21 11:30:59 字数 1234 浏览 2 评论 0原文

我让 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++ lib,但这没有帮助。

所以我从 nafxcwd.lib 中得到了 90 个 LNK2005 错误:

1>nafxcwd.lib(dlgprop.obj) : error 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:库 1>LINK:警告 LNK4098:defaultlib 'nafxcwd.lib' 与其他库的使用冲突;使用 /NODEFAULTLIB:库 1>LINK:警告 LNK4098:defaultlib 'libcmtd.lib' 与其他库的使用冲突;使用 /NODEFAULTLIB:library

然后我得到最后一个错误: libcmtd.lib(crt0.obj) : error LNK2019: 无法解析的外部符号 main 在函数 __tmainCRTStartup 中引用

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

谢谢,
亚历克斯

I got the c++/cli dll to link to a vc++ dll, but when trying it with the static version of the vc++ lib there are a bunch of linker errors. I want to use static so I dont have to copy all of the other vc++ dll files into my main c# project, which uses the c++/cli dll.

The vc++ library has the following properties:
*built in vs2008
*Static library
*uses MFC in a static library
*No common language runtime support

the c++/cli library has these properties:
*built in vs2010
*Dynamic Library
*Use of MFC in a shared DLL
*Common Language Runtime Support
*linker->input contains the vc++ lib file

I tried linking the vc++ lib it after building it in vs2010 but that didn't help.

So I get like 90 LNK2005 errors like these from nafxcwd.lib:

1>nafxcwd.lib(dlgprop.obj) : error LNK2005: "public: struct _PROPSHEETPAGEA & __thiscall CPropertyPage::GetPSP(void)" (?GetPSP@CPropertyPage@@QAEAAU_PROPSHEETPAGEA@@XZ) already defined in mfc100d.lib(mfc100d.dll)

then like 30 or so of these:
1>libcmtd.lib(sprintf.obj) : error LNK2005: _sprintf already defined in msvcrtd.lib(MSVCR100D.dll)

then three LNK4098 warnings:

LINK : warning LNK4098: defaultlib 'msvcrtd.lib' conflicts with use of other libs; use /NODEFAULTLIB:library
1>LINK : warning LNK4098: defaultlib 'nafxcwd.lib' conflicts with use of other libs; use /NODEFAULTLIB:library
1>LINK : warning LNK4098: defaultlib 'libcmtd.lib' conflicts with use of other libs; use /NODEFAULTLIB:library

then I get this last error:
libcmtd.lib(crt0.obj) : error LNK2019: unresolved external symbol main referenced in function __tmainCRTStartup

I looked up the LNK4098 warning on msdn and the solution was to add the conflicting libraries to the IgnoreSpecific Default libraries entry in the linker input settings, but this did not help.

Thanks,
alex

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

扛起拖把扫天下 2024-12-28 11:30:59

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

You can't link (C++) libraries build with different version of the VS compiler (sometimes it may accidentally seem to work but you'll usually get hard to diagnose crashes later on). Additionally, your errors seem to be typical of selecting different CRT configurations (single/multi-threaded, debug/release etc).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文