2013-09-24 21 views
1

我對我的項目使用C++/Qt,並且遇到這個奇怪的問題。在遠程Linux機器上RTTI檢查失敗

我的應用程序在任何本機Linux機器和Windows上運行良好。當我使用遠程Linux機器執行我的程序並使用X Windows服務器(我使用Xming)來查看/使用它時,出現問題。調試器指向dynamic_cast無法獲取對象指針的行(鑄造返回一個不錯的NULL),而不是我想要的實際對象。

我懷疑一些配置問題,我不得不啓用這些運行時檢查。

任何人都面臨這樣的問題,任何指向解決方案的指針都會受到歡迎。

+0

示例代碼將會有幫助。 –

+1

注意:對於'dynamic_cast <>'返回NULL是有效的。在將指針投射到不相關的指針類型時會發生這種情況。 –

+1

但這不太可能與X有關。RTTI在現代系統上默認使用,所以爲了排除這種可能性,我們需要知道遠程系統的操作系統(和版本)以及所使用的編譯器(和版本)構建應用程序。 –

回答

0

好吧,經過大量的試驗,這是解決方案。

我需要的接口類中明確出口,使用 屬性((能見度(「默認」))) ,並確保沒有在虛函數表的條目,界定和空的虛擬析構函數這一點。

看來在一些linux機器上,如果我不導出它不識別RTTI,並返回一個NULL。

0

你有什麼鏈接?我們與我們的Java 插件有類似的問題。如果dynamic_cast與構造對象的 DLL處於不同的DLL中,則在加載DLL時,RTLD_GLOBAL必須在調用dlopen時設置爲 。如果隱式加載DLL,它是否被設置將取決於它是如何爲DLL觸發加載設置的(這意味着您可能無法控制它)。最後,我們必須確保隱式加載(通過使Java加載特殊的 加載程序DLL,其以明確的方式加載所有內容,以 依賴性次序加載)。

請注意,這可能不是你的問題;我只是猜測,因爲 我沒有足夠的信息。但我們的症狀完全相同。

+0

你的意思是我在遠程機器上加載的dll與在本地機器上的不同。我需要做一些檢查以確定是否屬於這種情況。 –

+0

這聽起來像。 –