簡體   English   中英

找不到Dyld符號錯誤

[英]Dyld Symbol not Found Error

這是我的錯誤。

dyld: Symbol not found: __ZTIN8eqOsirix3ROIE
  Referenced from: /Users/slate/Documents/osirixplugins/CoreDataTrial_EQOsirix/build/Development/rcOsirix.app/Contents/MacOS/rcOsirix
  Expected in: flat namespace
 in /Users/slate/Documents/osirixplugins/CoreDataTrial_EQOsirix/build/Development/rcOsirix.app/Contents/MacOS/rcOsirix
Data Formatters temporarily unavailable, will re-try after a 'continue'. (Not safe to call dlopen at this time.)
(gdb) bt
#0  0x8fe01065 in __dyld_dyld_fatal_error ()
#1  0x8fe04fa5 in __dyld__ZN4dyld4haltEPKc ()
#2  0x8fe0796b in __dyld__ZN4dyld5_mainEPK12macho_headermiPPKcS5_S5_ ()
#3  0x8fe018b1 in __dyld__ZN13dyldbootstrap5startEPK12macho_headeriPPKcl ()
#4  0x8fe01057 in __dyld__dyld_start ()
(gdb) continue
Program received signal:  “EXC_BAD_ACCESS”.
Data Formatters temporarily unavailable, will re-try after a 'continue'. (Not safe to call dlopen at this time.)
(gdb) bt
#0  0x8fe010e3 in __dyld__ZN13dyldbootstrapL30randomizeExecutableLoadAddressEPK12macho_headerPPKcPm ()
#1  0x8fe04fa5 in __dyld__ZN4dyld4haltEPKc ()
#2  0x8fe0796b in __dyld__ZN4dyld5_mainEPK12macho_headermiPPKcS5_S5_ ()
#3  0x8fe018b1 in __dyld__ZN13dyldbootstrap5startEPK12macho_headeriPPKcl ()
#4  0x8fe01057 in __dyld__dyld_start ()
(gdb) 

其中eqOsirix是我的主要名稱空間。 不久前我遇到了兩個類似的問題( 一個兩個 ),但是現在都沒有解決方案對我有幫助。

更新Mac之后,我注意到了這個問題,但我認為這無關緊要。

不會產生編譯錯誤(或警告)。

是什么原因造成的? 為什么編譯器在鏈接期間沒有捕獲任何內容? 我已經完成了干凈的構建,同時重置了XCode和Mac。...我只是機智的結束,而Google只是為我提供了不包含第3方框架的內容,但這是我的主要namespace Augh!


[編輯]由於@Troubador指出ROI並不是爭奪戰的一部分,因此我將ROI包括在下面:

#ifndef EQOSIRIX_ROI_H
#define EQOSIRIX_ROI_H

namespace eqOsirix{

    class ROI : public eq::Object
    {

    public:
        ROI() {};
        virtual ~ROI() {};

        virtual uint32_t getType() {return NONE;};

        virtual void draw() {};

    protected:

        enum ROIType {
            NONE = 0,
            LINE,
            POLY,
            AREA,
            VOLUME
        };

    private:

    };

}


#endif//EQOSIRIX_ROI_H

沒有太多的事情要解決,我我已經為C ++(而不是Java或ObjC)定義了所有虛擬函數?

根據我們對您的問題的討論,我確定這與您的所有方法都在類定義中定義有關。 這意味着gcc沒有“鍵”功能,它可以為typeinfo對象發出符號,即沒有可以放置typeinfo對象的單個對象文件。gcc因此要做的是向每個對象發出typeinfo符號。需要它的文件,並在創建dylib時通知鏈接程序忽略重復項。

我詢問可見性屬性的原因是,即使將重復的符號之一標記為“隱藏”,鏈接器也將在dylib中隱藏typeinfo符號,而應用程序的任何其他部分在運行時都無法對其進行查找-時間。 您不會收到似乎與您報告的行為相符的編譯時錯誤。

如果您不確定是否使用可見性屬性,則可能不是,因為默認可見性是“默認”,這基本上意味着沒有隱藏。 在構建文件中尋找啟動-fvisibility gcc選項。 也可以使用諸如__attribute__ ((visibility ("hidden")))類的代碼在代碼中標記__attribute__ ((visibility ("hidden")))

我建議在cpp文件中移動至少一個成員定義的原因是強制一次發出typeinfo對象並測試這是否有所不同。 您沒有說自己是否嘗試過,所以很高興知道。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM