2012-06-26 68 views
0

我正在使用qt的静态库。到目前为止,我能够静态构建qt源代码并将它们链接到我的库。只要我尝试将库包含到主应用程序中(我使用xcode 4进行开发,将libNTFramework.a添加到我的构建阶段“链接库与二进制文件”并将用户头路径设置为框架头)我得到几个qt静态链接到库 - >符号(s)没有找到架构x86_64

未定义的体系结构x86_64符号:“vtable for NI :: NT :: ScriptApi :: Fields”,引用来自:libNTFramework.a中的ScriptApi :: Fields :: Fields()(Fields.o)ScriptApi :: Fields ::〜libNTFramework.a(Fields.o)中的Fields()注意:缺少的vtable通常意味着第一个非内联虚拟成员函数没有定义。 (...) LD:符号(S)没有发现建筑x86_64的

错误。当使用动态构建的qt时,错误不会发生。 使用

脂-info libNTFramework.a

输出告诉我,一切都建立了良好的x86_64的拱检查我的库:

非脂文件:libNTFramework。 a是架构:x86_64

任何想法我失踪了? thx提前!

更新: 这是一些代码...字段是由朋友类coponentmanager创建和“管理”的单例对象。

class Fields : public QObject 
{ 
    Q_OBJECT 
    friend class ComponentManager; 

public: 
    QScriptValue scriptValue() const; 

public slots: 
    void bind(const QString name, QScriptValue control); 
    void set(const QString name, const QVariant value); 
    QVariant get(const QString name) const; 

private: 
    Fields(); 
    virtual ~Fields(); 

    QScriptValue m_scriptValue; 
    ComponentManager* const componentManager() const; 

}; 

Fields::Fields() 
{ 
} 

Fields::~Fields() 
{ 
} 

QScriptValue Fields::scriptValue() const 
{ 
    return m_scriptValue; 
} 

void Fields::bind(const QString name, QScriptValue control) 
{ 
    try { 
     if (control.isQObject()) 
     { 
      QWidget* widget = qobject_cast<QWidget*>(control.toQObject()); 
      componentManager()->scriptableWizard()->currentPage()->registerField(name, widget);   
     } 
     else 
     { 
      throw new NonCriticalException(control.toString() + " does not represent a QObject"); 
     } 
    } catch (...) { 

    } 
} 

void Fields::set(const QString name, const QVariant value) 
{ 
    componentManager()->scriptableWizard()->setField(name, value); 
} 

QVariant Fields::get(const QString name) const 
{ 
    return componentManager()->scriptableWizard()->field(name); 
} 
(...) 

ComponentManager::ComponentManager(QScriptEngine* const engine, 
            ScriptableWizard* const wizard, 
             Application* const application) : 
    m_application(application), 
    m_scriptEngine(engine), 
    m_scriptableWizard(wizard) 
{ 
    s_instance = this; 
    m_scriptApiFields = new ScriptApi::Fields(); 
(...) 
} 

//! Delete the ComponentManager and all singletons created by it. 
ComponentManager::~ComponentManager() 
{ 
    delete m_scriptApiFields; 
    (...) 
} 
(...) 

回答

0

它无关,与图书馆的二元结构。它告诉你库文件(libNTFramework.a)中的NI::NT::ScriptApi::Fields类缺少某些虚拟成员函数的定义(实现)。即您在标题中定义了一些虚拟成员函数,但未实现它们。

+0

thx为您的提示。奇怪的是,它的工作原理,当我使用动态链接的QT。我会用一些代码更新我的初始文章。也许你会看到问题。 – hitme

+0

ctor和dtor是否有私密性?另外,你是否实现了这些插槽? –

+0

原因是为了防止在除friend类componentmanager之外的任何其他类中创建字段。是的,插槽已实施。在我的初始文章中看到我的更新。 – hitme

相关问题