我正在研究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