首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dyld符号未找到错误

Dyld符号未找到错误
EN

Stack Overflow用户
提问于 2010-09-16 14:16:15
回答 1查看 4K关注 0票数 2

这是我的错误。

代码语言:javascript
复制
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是我的主要名称空间。不久前,我遇到了两个类似的问题(onetwo),但现在这两种解决方案都没有帮助我。

我在升级mac之后注意到了这个问题,但我认为这是不相关的。

不生成编译错误(或警告)。

是什么导致的?为什么编译器在链接过程中没有捕捉到任何东西?我做了清理构建,重置了XCode和Mac.我只是在智慧的结束,谷歌只是给我的东西,为第三方框架不包括,但这是我的主要namespace!啊!

因为@Troubador指出ROI不是混乱的一部分,所以我在下面列出ROI:

代码语言:javascript
复制
#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)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-09-16 20:49:01

基于我们对您问题的讨论,我确信这与您的所有方法都是在类定义中定义的事实有关。这意味着gcc没有“键”功能,它可以同时发出typeinfo对象的符号,也就是说,没有一个可以放置类型信息对象的对象文件。因此,gcc所做的就是将typeinfo符号发送到每个需要它的对象文件中,并通知链接器在创建dylib时忽略重复。

我询问可见性属性的原因是,如果一个重复符号被标记为“隐藏”,那么链接器将在dylib中隐藏类型信息符号,而应用程序的任何其他部分都将无法在运行时查找它。您将不会得到一个编译时错误,似乎符合您正在报告的行为。

如果您不确定是否使用可见性属性,那么您可能不会使用,因为默认的可见性是“默认的”,这基本上意味着不隐藏。寻找gcc在构建文件中启动-fvisibility的选项。可见性也可以在代码中使用__attribute__ ((visibility ("hidden")))之类的东西来标记。

我建议在cpp文件中移动至少一个成员定义的原因是为了强制发出一个typeinfo对象,并测试这是否产生了影响。你没说你试过没试过,所以很高兴知道。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3727545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档