C ++ Qt:找不到动态库的方法

时间:2013-04-25 16:21:35

标签: c++ qt plugins

我正在研究Qt中必须可插拔的应用程序。我环顾了一会儿,突然在Qt中找到插件的例子:http://doc.qt.digia.com/4.6/tools-echoplugin.html

我改变了一些关于课程的东西。我添加了一个随机数生成器:

randomgenerator.h:

#ifndef RANDOMNUMBER_H
#define RANDOMNUMBER_H

class RandomNumber
{
public:
    ~RandomNumber();
    RandomNumber();
    int getNumber();
};

#endif // RANDOMNUMBER_H

randomgenerator.cpp:

#include "randomnumber.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

RandomNumber::RandomNumber()
{
    srand(time(NULL));
}

int RandomNumber::getNumber(){
    return rand() % 20;
}

然后我在插件中做了一个小调整:

echoplugin.cpp:

#include <QtGui>
#include "randomnumber.h"
#include "echoplugin.h"

QString EchoPlugin::echo(const QString &message)
{
    RandomNumber* rn = new RandomNumber();
    QString a;
    a.setNum(rn->getNumber());
    return a;
}

Q_EXPORT_PLUGIN2(echoplugin, EchoPlugin);

这是我正在努力的程序的一个非常简化的版本。给定链接上的示例的其他类和方法尚未更改。 当我尝试执行这个程序时,我得到了与我自己的程序相同的错误:

/home/user/qt/v1/echoplugin/echoplugin: symbol lookup error: /home/user/qt/v1/echoplugin/plugins/libechoplugin.so: undefined symbol: _ZN12RandomNumberC1Ev

我通过c ++ filt运行它,它说问题出在

RandomNumber::RandomNumber()

但我找不到有关该方法的任何错误。

提前致谢!


编辑:到目前为止,我已经解决了这个问题,现在将为遇到同样问题的程序员提供解释。

这实际上是一个非常简单的解决方案:如果你想使用不在你的接口的头文件中的头文件和源文件的代码,你所要做的就是在.pro文件中包含相对路径,包括源文件和头文件。 所以,如果我想使用RandomNumber类,我必须将它添加到插件的.pro文件中:

HEADERS += ../randomnumber.h
SOURCES += ../randomnumber.cpp

0 个答案:

没有答案