分发Windows C库:如何决定是创建静态库还是动态库?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了分发Windows C库:如何决定是创建静态库还是动态库?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1489字,纯文字阅读大概需要3分钟。
内容图文
![分发Windows C库:如何决定是创建静态库还是动态库?](/upload/InfoBanner/zyjiaocheng/950/979eebde26554da9876e98ff02622e69.jpg)
我们一直在将Java和.NET API库转换为C,并试图找出将编译版本分发给其他开发人员以与其自定义应用程序一起使用的最佳方法.它应该是静态库还是动态库?
我们需要为Win32和Win64创建(我想每个目标操作系统的Debug和Release版本).考虑到我试图确保所有引用的库都匹配(/ MT与/ MD)所遇到的所有挫折感,我想知道是否有决定在这里制作哪个将为其他开发人员简化它.
当我运行dumpbin / all<静态库文件名> |在静态库上查找/ i“msvc,我没有看到任何运行时引用(不像我在.exe或.dll上做同样的事情).这是否表明运行时尚未链接,这给了开发人员在开发和构建自己的应用程序时,使用/ MT或/ MD更灵活吗?
哪种方法可以让开发人员的生活更轻松?
解决方法:
静态库更容易创建,但更难分发.客户端程序员将把它们链接到他的程序中,因此编译设置与他的兼容非常重要.您必须至少分发4个版本,对应4个不同的CRT版本(/ MD,/ MDd,/ MT,/ MTd).并且您需要将其乘以常用的Visual Studio版本的数量.如果您不知道客户端程序员将要使用什么,那么这可能是一个非常大的列表.
没有DLL的问题,你只为导出的函数声明提供一个.h,一个.lib,它是DLL的导入库(没有代码,只包含名称)和.dll本身.
但是,为您的DLL创建可从任何C或C编译器使用的接口更难.您不能公开任何标准C库类,返回std :: string不会起作用.您无法创建任何分配调用者需要释放的内存的函数.通常不能跨越边界抛出异常.执行任何这些操作往往会导致很难诊断客户端程序员的运行时问题,这是由内存分配器和类对象布局差异不匹配引起的. COM对象模型是这种接口的一个示例.
这不是您使用静态库时遇到的问题.有点意外,它们需要运行时和编译器版本匹配.如果客户端程序员遇到了一个错误的静态库,那么他也会遇到所有这些问题.和更多.静态图书馆就像青少年性行为.你犯了一个错误,并在你的余生中最终支持它.
内容总结
以上是互联网集市为您收集整理的分发Windows C库:如何决定是创建静态库还是动态库?全部内容,希望文章能够帮你解决分发Windows C库:如何决定是创建静态库还是动态库?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。