0

我正在开发一个必须是可插入的 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
4

0 回答 0