1

プロジェクトに C++/Qt を使用していますが、この奇妙な問題に直面しています。

私のアプリケーションは、ネイティブの Linux マシンと Windows で問題なく動作します。この問題は、リモートの Linux マシンを使用してプログラムを実行し、X Windows サーバー (Xming を使用) を使用して表示/使用すると発生します。デバッガーは、dynamic_cast がオブジェクト ポインターの取得に失敗する行を指します (キャストが返す私が欲しかった実際のオブジェクトの代わりに素敵なNULL)。

これらの実行時チェックを有効にするために欠落している必要がある構成の問題があると思われます。

誰もがそのような問題に直面したことがあり、解決策への指針は大歓迎です。

4

2 に答える 2

0

どのようにリンクしましたか?Java プラグインにも同様の問題がありました。dynamic_castオブジェクトが構築された DLL とは異なる DLL にある場合は、DLL がロードされるときにRTLD_GLOBALへの呼び出しで設定する必要があります。dlopenDLL が暗黙的にロードされる場合、それが設定されるかどうかは、ロードをトリガーする DLL の設定方法によって異なります (つまり、それを制御できない可能性があります)。最後に、暗黙的にロードされるものが ない .soことを確認する必要がありました (依存関係の順序ですべてを明示的にロードする特別なローダー DLL を Java にロードさせることにより)。

これはあなたの問題ではないかもしれないことに注意してください。情報が少ないので推測ですが。でも全く同じ症状でした。

于 2013-09-24T15:20:55.340 に答える
0

わかりました、多くの試行錯誤の後、これが解決策でした。

attribute ((visibility("default")))を使用して、インターフェイス クラスを明示的にエクスポートする必要 がありました。vtable にエントリがあることを確認するには、この仮想デストラクタを定義して空にします。

一部の Linux マシンでは、エクスポートしないと、RTTI が認識されず、NULL が返されるようです。

于 2013-10-21T05:10:29.950 に答える