我正在开发一个必须是可插入的 Qt 应用程序。我环顾四周,突然发现了一个 Qt 插件示例:http: //doc.qt.digia.com/4.6/tools-echoplugin.html
我已经改变了一些关于类的东西。我添加了一个随机数生成器:
随机发生器.h:
#ifndef RANDOMNUMBER_H
#define RANDOMNUMBER_H
class RandomNumber
{
public:
~RandomNumber();
RandomNumber();
int getNumber();
};
#endif // RANDOMNUMBER_H
随机发生器.cpp:
#include "randomnumber.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
RandomNumber::RandomNumber()
{
srand(time(NULL));
}
int RandomNumber::getNumber(){
return rand() % 20;
}
然后我在插件中做了一个小调整:
回声插件.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