我有一个C++类,我现在正在编写这个类将用于我正在处理的所有项目。我可以选择把它放在一个静态库中,或从一个DLL导出类。每种方法有哪些好处/处罚?我能想到的唯一一个编译代码大小,我并不关心它。谢谢!一个DLL的从dll与静态库导出类的好处
2
A
回答
9
优点:
- 您可以访问这个功能的多个不同的exe文件的,所以你将有一个较小的项目规模的整体。
- 您可以动态更新您的组件,而无需替换整个exe。如果你这样做,但要小心界面保持不变。
- 有时候就像在LGPL的情况下,你被迫使用DLL。
- 您可以将一些组件作为C#,Python或与您的DLL绑定的其他语言。
- 您可以构建使用DLL的不同版本的DLL的程序。例如,您可以检查某个操作系统DLL中是否存在某个函数,并且只在该DLL存在时调用该函数,否则执行其他一些处理。
优势静态库:
- 你不能有DLL verisoning这样
- 少分配的问题,你是不是被迫进入一个完整的安装程序,如果你只有一个小的应用程序。
- 您不必担心其他任何人绑定到您的代码中,如果它是DLL,则可以访问它。
- 更容易开发一个静态库,因为您不需要担心出口和进口。
- 内存管理更容易。
0
在Windows上动态库的最重要和最常见的特征之一是DLL有自己的堆。根据您的观点,这可能是一种优势或劣势,但您需要了解它。例如,DLL中的全局变量将在连接到该库的所有进程之间共享,这可能是事实上的进程间通信的有用形式或不明确的运行时错误的来源。
+1
这不是100%正确的。 DLL中的全局变量是每个进程的实例。你可以通过编译/链接技巧创建系统全局变量,但这不是默认值。正如William在Win3.1中所说的那样,但在Win95/NT中发生了变化。 – jmucchiello 2009-11-24 20:37:37
相关问题
- 1. 从C++静态库导出变量
- 2. 导出类(DLL)中静态数据成员的可访问性?
- 3. 从DLL导出C++类
- 4. 从C++ DLL访问C#静态类
- 5. 导出静态库的成员函数
- 6. 导出从DLL
- 7. Poco作为动态运行库的静态库需要导入DLL库吗?
- 8. 静态与非静态类
- 9. 从动态DLL访问静态链接库中的静态变量/函数
- 10. 什么是更好的:公共静态类与静态方法或公共类与静态方法?
- 11. 在C++静态库中导出函数
- 12. 是否真的比静态更好地处理动态类?
- 13. 动态地从DLL中导入C++类
- 14. 在Visual Studio中的静态库vs DLL
- 15. 在C#中导出一个静态类#
- 16. 这是“好”:COM DLL或标准DLL与类型库?
- 17. 在从NodeJS模块导出的类中引用静态方法
- 18. 从java中的默认包中导入静态类时出错
- 19. 从Visual C++ DLL导出非托管类?
- 20. 无法从dll,vs2010,C++导出类
- 21. 从静态类触发非静态类?
- 22. 如何在编译DLL到静态库时处理DLL_EXPORT?
- 23. Java-RAM&静态变量的好处
- 24. C#,IronPython - 从非静态类导入(?)
- 25. 是否有可能在一个DLL中的导出函数返回一个导出类的静态成员?
- 26. 如何防止从静态链接库中导出符号?
- 27. 用静态库构建一个DLL
- 28. 什么是MSVC的DLL,静态库和导入库正确的命名约定
- 29. 静态与动态类型
- 30. 编译一个C++库作为一个静态库和动态DLL与VS
很好的理由,我没有想到版本控制 – Steve 2009-11-24 20:07:26
避免DLL版本问题的一种方法是将版本号添加到DLL文件的名称(例如作为后缀,如'mydll300.dll')。 – 2009-11-24 20:09:11
顺便说一句,感谢您继续完善您的答案 – Steve 2009-11-24 20:13:17