c++ - Visual C++ - 将插件 DLL 链接到 EXE?

标签 c++ visual-studio-2008 visual-c++ dll plugins

我正在将一个大型 C++ 应用程序从 Linux (gcc) 移植到 Windows (Visual C++ 2008),但我遇到了插件链接器问题。在 Linux 上这不是问题,因为 .so 支持运行时符号查找,但 dll 似乎不支持这个。

一些背景信息: 托管脚本环境的应用程序(主机)提供插件接口(interface)(通过脚本 API 调用在运行时加载的共享库),允许在不重新编译主机应用程序的情况下扩展主机和脚本 API。在 Linux 上,这只是将主机应用程序的 header 包含在插件源中的问题,但在 Windows 上,我收到链接器错误。我不确定我需要为 Visual C++ 链接什么来解析这些符号。

我们的一个依赖项(开源,LGPL)具有预处理器声明,用于将 __declspec(dllexport) 和 __declspec(dllimport) 插入其 header 中。一些先前的研究表明我可能也必须这样做,但我想在修改一大堆核心 header 之前确定一下。 (我以前能够在 MinGW 上运行它,但我们已经决定支持 Visual Studio 是此类商业项目的要求。)

我的问题简而言之:如何将运行时加载的 dll 链接到 Visual C++ 中的主机 exe?

编辑:为了通过示例阐明问题,我的主机应用程序中有一个类 Object,它代表脚本可以访问的对象的基本类型。在我的插件中,我有许多扩展 Object 以执行其他功能的类,例如集成网络支持或新的视觉元素。这意味着我的 dll 必须与主机 exe 中的符号链接(symbolic link),我不确定该怎么做。

最佳答案

“运行时符号查找”是什么意思?您的意思是使用 dlopendlsymso on 动态加载库吗? ? equivalents in Windows称为 LoadLibraryGetProcAddress

在 Windows 中,您不会从可执行文件中导出符号。您应该只从 dll 中导出它们。解决问题的正确方法是重新构建,以便导出的符号位于可执行文件和其他插件 dll 可以链接的 dll 中。

关于c++ - Visual C++ - 将插件 DLL 链接到 EXE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/770344/

相关文章:

c++ - 宏的实际参数太多?

visual-studio-2008 - 为什么将对象的地址转换为与 this 指向的相同的类会导致另一个对象值?

c++ - Qt项目C2872错误,生成的ui文件中符号不明确

c++ - 将 COM 接口(interface)指针传递给函数

visual-studio-2008 - 开发环境的最佳 SQL Server 设置是什么?

visual-c++ - OpenCV 2.0 C++ API 使用 imshow : returns unhandled exception and "bad-flag"

C++:链接器子系统

c++ - 如果 Y 值为 1,即使 X 值为 0,sf::Vector2i 作为 std::map 中的键显示为 (1, 1)

c++ - 带有可变模板参数的右值限定符丢失

c++ - 错误 : 'enumElement' was not declared in this scope