繁体   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