• 3597阅读
  • 2回复

[提问]QT 嵌入式使用动态库遇到的罕见问题 [复制链接]

上一主题 下一主题
离线tony.xu
 

只看楼主 倒序阅读 楼主  发表于: 2015-02-26
   最近正在做个嵌入式的项目,由多个模块组成,姑且把他们命名为,A(主程序), B(子模块),C(子模块)...
   我主程序A启起来后,用户若点B模块图标,即启动B模块,采用QLibrary类的load方法调用B模块生成的动态库
   主程序A中调用方法:
void Mainwidget::importOtherModule(const QString &filename){
    m_commonLib.setFileName(filename);
    if (m_commonLib.load())
    {
        m_createModuleFunction = (CreateModule)m_commonLib.resolve("createModule");
        if(m_createModuleFunction)
        {
            m_pOtherModule = 0;
            m_pOtherModule = m_createModuleFunction();

            if(m_pOtherModule)
            {
                ui->stackedWidget->addWidget(m_pOtherModule);
                ui->stackedWidget->setCurrentIndex(OTHER_MODULE_PAGE);

                connect(m_pOtherModule, SIGNAL(signalSendMsgToPAM(const int&, const QVariant&)),
                           this,SLOT(slotHandleOtherModuleMsg(const int&, const QVariant&)), Qt::QueuedConnection);
            }
        }
        else
             qDebug() << "resolve failed";
    }
    else
        qDebug()<<"load submodule failure!";
}

接口文件如下:

//moduleinterface.h

#ifndef MODULEINTERFACE_H
#define MODULEINTERFACE_H

#include <QWidget>
#include <QVariant>
#include <QtCore/qglobal.h>
#include "globaldefine.h"

class ModuleInterface : public QWidget
{
    Q_OBJECT

public:
    virtual ~ModuleInterface() {}

signals:
    void signalSendMsgToPAM(const int &cmd, const QVariant &data = QVariant());

public slots:
};

extern "C" MODULESHARED_EXPORT ModuleInterface* createModule();

#endif // MODULEINTERFACE_H

//moduleinterface.cpp
#include <QDebug>
#include "moduleinterface.h"
#include "scdvisualizer.h"

ModuleInterface* createModule()
{
    return new ScdVisualizer();
}

B模块中类ScdVisualizer 继承接口类ModuleInterface
class ScdVisualizer : public ModuleInterface
{
    Q_OBJECT

public:
    explicit ScdVisualizer(QWidget *parent = 0);
    virtual ~ScdVisualizer();
          ......
private:
    Ui::ScdVisualizer *ui;

       ConsoleContainer *m_pConsoleContainer;   //类ConsoleContainer
};

#endif // SCDVISUALIZER_H
而类ScdVisualizer 需要调用ConsoleContainer 中函数addButton(),问题就出在这里,这个addButton函数始终不会被执行,程序也不报错,看起这条语句被注释一样。但是如果我在windows环境中运行,正确无误。只是在嵌入式环境中问题才显现。请高手帮助看下,感激不尽!
本帖提到的人: @XChinux @wuleeemail @transformer
离线tony.xu

只看该作者 1楼 发表于: 2015-02-27
自已顶一个
离线tony.xu

只看该作者 2楼 发表于: 2015-02-27
感觉是不是linux环境下编译动态库时需要加一些编译选项,或是Makefile文件中修改什么,有高手知道的不,不甚感激
本帖提到的人: @wuleeemail @transformer @yearl
快速回复
限100 字节
 
上一个 下一个