RTTI 检查在远程 Linux 计算机上失败
RTTI check fails on remote Linux machine
我在项目中使用C++/Qt,我遇到了这个奇怪的问题。
我的应用程序在任何本机Linux机器和Windows上运行良好。当我使用远程 Linux 机器执行我的程序并使用 X Windows 服务器(我使用 Xming)查看/使用它时,会出现问题。调试器指向dynamic_cast无法获取对象指针(强制转换返回一个漂亮的 NULL)而不是我想要的实际对象的行。
我怀疑必须缺少一些配置问题才能启用这些运行时检查。
任何人都遇到过这样的问题,任何关于解决方案的指示都将受到欢迎。
你们是如何链接的? 我们的Java也有类似的问题插件。 如果dynamic_cast
位于与在其中构造对象的 DLL,必须设置RTLD_GLOBAL
在调用中dlopen
加载 DLL 的时间。 如果 DLL隐式加载,是否设置将取决于它如何是为触发加载的 DLL 设置的(这意味着您可能无法控制它)。 最后,我们必须确保不 .so
是隐式加载的(通过让 Java 加载一个特殊的加载器 DLL,它显式加载所有内容,在依赖顺序)。
请注意,这可能不是您的问题;我只是猜测,因为我没有足够的信息。 但我们有完全相同的症状。
好的,经过大量试验,这就是解决方案。
我需要显式导出接口类,使用属性((可见性("默认")))为了确保 vtable 中有一个条目,为此定义并清空虚拟析构函数。
似乎在某些 Linux 机器上,如果我不导出它无法识别 RTTI,并返回 NULL。
相关文章:
- 如果没有malloc,链表实现将失败
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- 视图中的参数推导失败:take_while
- 链接到自行创建的dll失败
- 带有特殊路径部分的"std::filesystem::weakly_canonical"失败
- GetShortPathName在网络驱动器上使用中文文件夹时失败
- gcc和c++17的过载解析失败
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- 在WSL:configure_file上对config_file的每次调用都失败:配置文件时出现问题
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 链接阶段在Ubuntu上失败,但在MacOS上失败
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- 从父数组测试用例构造二叉树失败
- LibGit2 SSH身份验证失败
- 如何让LLDB在成功时退出,在失败时等待
- 当在64箱计算机中使用32个bin应用程序时,terminateProcess()失败
- 使用多台计算机执行失败
- cudaMalloc在使用计算机内存时失败