私は、プラグイン可能でなければならない 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
ランダムジェネレーター.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