我在项目中使用C ++ / Qt,我正面临这个奇怪的问题。
我的应用程序在任何本机Linux机器和Windows上运行良好。当我使用远程Linux机器执行我的程序并使用X Windows服务器(我使用Xming)来查看/使用它时出现问题。调试器指向dynamic_cast无法获取对象指针的行(转换返回一个很好的NULL)而不是我想要的实际对象。
我怀疑在启用这些运行时检查时必须缺少一些配置问题。
任何人都遇到过这样的问题,欢迎任何有关解决方案的指示。
答案 0 :(得分:0)
你是如何联系的?我们的Java遇到了类似的问题
插件。如果dynamic_cast
与DLL不同
构造对象的DLL,必须设置RTLD_GLOBAL
在加载DLL时调用dlopen
。如果是DLL
隐式加载,是否设置将取决于它如何
为DLL触发加载设置(这意味着你
可能无法控制它)。最后,我们必须确保这一点
没有 .so
被隐式加载(通过让Java加载一个特殊的
loader DLL,它显式地加载了所有内容
依赖顺序)。
请注意,这可能不是您的问题;我只是猜测,因为 我没有足够的信息。但我们完全一样 症状。
答案 1 :(得分:0)
好的,经过大量的试验,这就是解决方案。
我需要使用明确导出接口类 的属性强>((可见性( “默认”))) 并确保vtable中有一个条目,为此定义并清空虚拟析构函数。
似乎在某些linux机器上,如果我不导出它不识别RTTI,并返回NULL。