[Qt-interest] Plugin framework
Tim Peeters
thjmpeeters at gmail.com
Mon Nov 23 23:52:40 CET 2009
My apologies, I only discovered the QPluginLoader::errorString() function
now.
So if I include this line:
if (!loader.load()) cout<<"error:
"<<qPrintable(loader.errorString())<<endl;
instead of the cout<<"bla" below, it prints the following error message:
error: Cannot load library
/home/tim/dtibuild/new/bin/libbmia_BogusPlugin.so:
(/home/tim/dtibuild/new/bin/libbmia_BogusPlugin.so: undefined symbol:
_ZTV11BogusPlugin)
Unfortunately I still do not know how to solve this :(
Tim.
On Mon, Nov 23, 2009 at 23:38, Tim Peeters <thjmpeeters at gmail.com> wrote:
> Hi,
>
> I'm trying to write software that can be extended using plugins.
> I follow the guidelines as given on
> http://qt.nokia.com/doc/4.5/plugins-howto.html#the-lower-level-api-extending-qt-applications
>
> I created a simple interface:
>
> class TestInterface
> {
> public:
> virtual ~TestInterface() {}
> virtual int testFunction() = 0;
> };
> Q_DECLARE_INTERFACE(TestInterface, "bmia.plugin.TestInterface/1.0")
>
>
> and a plugin class:
>
> class BogusPlugin : public QObject, public TestInterface
> {
> Q_OBJECT
> Q_INTERFACES(TestInterface)
>
> public:
> int testFunction();
> }
>
> and implementation:
>
> int BogusPlugin::testFunction()
> {
> return 2;
> }
> Q_EXPORT_PLUGIN2(BogusPlugin, BogusPlugin)
>
>
> And I created a Manager class to manage my plugins. For now I have this
> function to load a simple plugin:
>
> bool Manager::load(string filename)
> {
> cout<<"Going to try to load plugin from file "<<filename<<endl;
>
> QPluginLoader loader(QString(filename.c_str()));
>
> QFile* file = new QFile();
> file->setFileName(loader.fileName());
> cout<<"file exists = "<<file->exists()<<endl;
> delete file;
>
> if (!loader.load()) cout<<"bla"<<endl;
>
> QObject* loadedQObject = loader.instance();
> if (!loadedQObject)
> {
> cout<<"Plugin from file "<<filename<<" could not be loaded."<<endl; //
> XXX: replace by core warning message, also below.
> return false;
> } // if
> return true;
> }
>
> And I have a test program to see if I can load the BogusPlugin:
>
> int main(int argv, char *args[])
> {
> QApplication app(argv, args);
> plugin::Manager* m = new plugin::Manager();
> m->load("libbmia_BogusPlugin.so");
> return app.exec();
> }
>
> When I run the program, I get the following:
>
> $ ./fakeplugin
> Going to try to load plugin from file libbmia_BogusPlugin.so
> file exists = 1
> bla
> Plugin from file libbmia_BogusPlugin.so could not be loaded.
>
>
> All I know from this is that QPluginLoader.load(..) function returns false
> and the plugin is not properly loaded.
> But I cannot discover why this is happening. For building we use CMake. The
> supposed plugin is compiled as a dll (bmia_BogusPlugin.so on linux), and the
> main function is compiled for the fakeplugin executable that should load the
> plugin. The file can be found, but no plugin is loaded from this.
>
> Does anyone have an idea on what may be my problem? Maybe I am missing
> something?
>
> Thanks,
> Tim.
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.qt-project.org/pipermail/qt-interest-old/attachments/20091123/37e9d6bf/attachment.html
More information about the Qt-interest-old
mailing list