【发布时间】:2010-10-20 16:46:02
【问题描述】:
我正在将大型 C++ 应用程序从 Linux (gcc) 移植到 Windows (Visual C++ 2008),并且遇到插件的链接器问题。在 Linux 上这不是问题,因为 .so 支持运行时符号查找,但 dll 似乎不支持。
一些背景资料: 托管脚本环境的应用程序(主机)为插件(在运行时通过脚本 API 调用加载的共享库)提供接口,允许在不重新编译主机应用程序的情况下扩展主机和脚本 API。在 Linux 上,这只是将主机应用程序的标头包含在插件源中的问题,但在 Windows 上,我收到链接器错误。我不确定我需要链接什么来让 Visual C++ 解析这些符号。
我们的一个依赖项(开源,LGPL)具有预处理器声明,用于将 __declspec(dllexport) 和 __declspec(dllimport) 插入其标头中。一些先前的研究表明我可能也必须这样做,但在我去修改一大堆核心头文件之前,我想确定一下。 (我之前可以在 MinGW 上完成这项工作,但我们决定支持 Visual Studio 是此类商业项目的一项要求。)
简而言之,我的问题是:如何将运行时加载的 dll 与 Visual C++ 中的主机 exe 链接起来?
编辑:为了用一个例子来说明问题,我在我的宿主应用程序中有一个类,Object,它代表了一个可以被脚本访问的对象的基本类型。在我的插件中,我有许多扩展 Object 的类来执行其他功能,例如集成网络支持或新的视觉元素。这意味着我的 dll 必须与宿主 exe 中的符号链接,我不知道该怎么做。
【问题讨论】:
-
我在解决这个问题时遇到了一些麻烦。如果您有一个具体的示例并将其简化为几行代码,也许这可能会对每个人都有帮助。
标签: c++ visual-studio-2008 visual-c++ dll plugins