静态链接到 pion 网络库

Posted

技术标签:

【中文标题】静态链接到 pion 网络库【英文标题】:Linking statically against pion network library 【发布时间】:2011-05-09 14:14:46 【问题描述】:

我正在尝试在我的应用程序中链接 pion 网络库 4.0.3。我试图在 RELEASE_STATIC 模式下简单地编译 pion::netlib - 这很有效。但是,当我在我的应用程序中链接它时,我会得到很多未解决的外部问题。

然后我发现 RELEASE_STATIC 配置定义了 PION_STATIC_LINKING,并且从另一篇关于另一个库的帖子中我发现我可能还需要在我的程序中定义 PION_STATIC_LINKING。

这样做会在以下模板中产生 100 个错误:

error LNK2005: _tolower already defined in MSVCRT.lib(MSVCR100.dll) C:\Users\name\Documents\Visual Studio 2010\Projects\myproj\LIBCMT.lib(tolower.obj)  myproj

我尝试使用 /NODEFAULTLIB:libcmt,但仍然收到错误消息,指出某些函数已在 pion-common.lib / pion-net.lib 中定义。

有什么想法吗? :(

【问题讨论】:

【参考方案1】:

这很可能是因为您正在使用 /MT(多线程)设置来编译项目以进行代码生成,而 pion 网络库是使用 /MD(多线程 DLL)编译的,反之亦然。如果是 /MT,请尝试将您的配置更改为 /MD,反之亦然。为此,请转至Project -> <ProjectName> Properties... -> Configuration Properties -> C/C++ -> Code Generation。在右侧面板中,您应该能够看到设置Runtime Library。更改那里的选项并重建您的整个解决方案。

【讨论】:

嘿,谢谢,你说的很对!你能指出一些我可以用谷歌搜索的流行词或一些我可以阅读的文章/资源,以帮助我理解代码生成设置 DLL 和“配置类型”/输出设置 DLL 之间的区别吗? 简单来说,您的 C++ 应用程序在分发到其他机器时需要具有与您在使用 /MD 时编译时所针对的相同版本的 CRT(C 运行时间)库。但是,当您使用 /MT 时,依赖库会静态链接到您的应用程序,因此不需要目标计算机安装 CRT。更多关于它的讨论在这里:social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/…

以上是关于静态链接到 pion 网络库的主要内容,如果未能解决你的问题,请参考以下文章

如何将 C++ dll 静态链接到 .NET 库(将 c++ dll 构建到网络包装器 dll 以获取一个 dll)

如何静态链接到 libstdc++.喜欢升级的GCC的朋友快来看看

静态链接库和动态链接库

opencv静态链接库有啥用

静态库,链接到共享库

动态链接库和静态链接库的区别简述