【发布时间】:2011-05-22 03:06:42
【问题描述】:
我有一个关于共享库/.dll 和类导入/导出的问题。经过一些研究,我了解到两种方法如下:
这是我知道的仅有的两种方式。第一个是禁忌,因为它提供了 0 的可移植性。第二,当你意识到你需要为每个不同的构造函数有不同的构造函数,只能使用 POD 类型作为参数时,你会开始烦人。 C++ 类的优点,例如重载函数和默认函数参数。
对于一个应该向用户提供库的 .dll,例如,即使是第二种方式,类的集合也会变得非常不方便。所以我想知道这里的解决方案是什么?只需为每个主要编译器使用第一种方式编译不同的 .dll 吗?大库的共享库版本如何工作?例如 wxWidgets 也提供了一个 .dll 版本。他们如何避免.dll的最终用户对类的正常使用而避免接口解决方案?
【问题讨论】:
-
C++ 没有标准的 ABI。如果您想要真正的可移植性,则必须坚持使用 C。
-
我理解这一点,并且知道唯一真正可移植的语言是 C,但我的问题仍然存在。像 wxWidgets 这样的大型可移植库如何管理动态/共享库?
-
我相信 wxWidgets 以源代码的形式分发,让你为你的编译器自己构建它。
-
是的,这是真的,我的例子根本不是一个好例子。假设您要构建一个 API、一个复杂的类和函数集合,并希望通过 .dll 以可移植的方式将这些公开给用户。除了默认接口没有别的办法吗?
-
您必须为每个编译器版本发布一个 DLL。如果您知道您的用户使用 VC++,那么您可以坚持下去。