gpt4 book ai didi

c++ - 在 dll 中解析外部符号

转载 作者:行者123 更新时间:2023-11-30 04:24:42 25 4
gpt4 key购买 nike

我正在开发一个带有插件系统的跨平台 c++/qt 项目,我们在 linux 上使用 so 文件,在 windows 上使用 dll。我们通过 cmake 在 Linux 上使用 gcc,在 Windows 上使用 Visual Studio 2010。问题是我们的插件有时需要从应用程序源代码调用一个函数,这在 Linux 上使用 gcc 只需包含头文件就可以正常工作。但是在 Visual Studio 上,我们遇到了 Unresolved external symbol 错误。

是不是so和dll文件工作方式不一样?

谢谢。

最佳答案

在 Windows 上从 dll 导出符号的默认行为恰恰相反:默认情况下,符号是不可见的,您需要显式导出它们。使用 VC++,这是通过 __declspec(dllexport) declarators 完成的.

编辑(已添加信息):您正在进入一个非标准化的、系统特定行为的区域……用 C++ 编写跨平台“可插入”组件系统的相关问题比您预期的要多得多。在 Windows 上有所谓的导入库,它定义了从 dll 导出的所有符号。您必须链接这些库才能解析这些符号。这叫做 implicit linking .您还可以显式链接,这意味着在运行时加载 dll 及其导出的符号。然而,与所谓的二进制兼容性问题相比,所有这些都只是技术细节,如果在组件系统的设计过程中不考虑这些问题,这几乎肯定会要了你的命。

我想知道一件事:您说您正在使用 Qt。 Qt 应用程序框架在编写和构建可插入组件方面拥有自己的跨平台约定和规则。你为什么不坚持这些...?

关于c++ - 在 dll 中解析外部符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12544041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com