communi / libcommuni

A cross-platform IRC framework for Qt
https://communi.github.io
BSD 3-Clause "New" or "Revised" License
83 stars 37 forks source link

communiplugin not found #44

Closed jbltx closed 9 years ago

jbltx commented 9 years ago

I always have the same error when I try to launch QML and Quick examples :

module "Communi" plugin "communiplugin" not found

I checked and the lib is well installed in the qml directory of Qt installation, but it seems the compiler can't find it. I tested on OSX and Win 8.1 and it's the same. Did I miss something ?

jpnurmi commented 9 years ago

Check the output of QML_IMPORT_TRACE=1 ./quick.app/Contents/MacOS/quick. Mine looks like:

QQmlImportDatabase::addImportPath: "/Users/jpnurmi/Qt/5.5/clang_64/qml"
QQmlImportDatabase::addImportPath: "/Users/jpnurmi/Projects/libcommuni/examples/quick/quick.app/Contents/MacOS"
[...]
QQmlImports(qrc:/main.qml)::addLibraryImport: "Communi" 3.0 as ""
QQmlImports(qrc:/main.qml)::importExtension: loaded "/Users/jpnurmi/Qt/5.5/clang_64/qml/Communi/qmldir"
QQmlImportDatabase::registerPluginTypes: "Communi" from "/Users/jpnurmi/Qt/5.5/clang_64/qml/Communi"
[...]
jbltx commented 9 years ago

Here's the output :

QQmlImportDatabase::addImportPath: "/Users/mickaelb/Qt/5.4/clang_64/qml"
QQmlImportDatabase::addImportPath: "/Users/mickaelb/Downloads/libcommuni-3.3.0/examples/quick/quick.app/Contents/MacOS"
QQmlImports(qrc:/main.qml)::addLibraryImport: "QtQuick" 2.1 as ""
QQmlImports(qrc:/main.qml)::importExtension: loaded "/Users/mickaelb/Qt/5.4/clang_64/qml/QtQuick.2/qmldir"
QQmlImportDatabase::registerPluginTypes: "QtQuick" from "/Users/mickaelb/Qt/5.4/clang_64/qml/QtQuick.2"
QQmlImports(qrc:/main.qml)::addLibraryImport: "QtQuick.Controls" 1.0 as ""
QQmlImports(qrc:/main.qml)::importExtension: loaded "/Users/mickaelb/Qt/5.4/clang_64/qml/QtQuick/Controls/qmldir"
QQmlImportDatabase::registerPluginTypes: "QtQuick.Controls" from "/Users/mickaelb/Qt/5.4/clang_64/qml/QtQuick/Controls"
QQmlImports(qrc:/main.qml)::addLibraryImport: "Communi" 3.0 as ""
QQmlImports(qrc:/main.qml)::importExtension: loaded "/Users/mickaelb/Qt/5.4/clang_64/qml/Communi/qmldir"
QQmlImportDatabase::resolvePlugin: Could not resolve plugin "communiplugin" in "/Users/mickaelb/Qt/5.4/clang_64/qml/Communi"
QQmlApplicationEngine failed to load component
qrc:/main.qml:12 module "Communi" plugin "communiplugin" not found
jpnurmi commented 9 years ago

I suppose either /Users/mickaelb/Qt/5.4/clang_64/qml/Communi/libcommuniplugin.dylib is missing, or otool -L /Users/mickaelb/Qt/5.4/clang_64/qml/Communi/libcommuniplugin.dylib reports a missing dependency?

$ otool -L ~/Qt/5.4/clang_64/qml/Communi/libcommuniplugin.dylib 
/Users/jpnurmi/Qt/5.4/clang_64/qml/Communi/libcommuniplugin.dylib:
    libcommuniplugin.dylib (compatibility version 0.0.0, current version 0.0.0)
    /Users/jpnurmi/Qt/5.4/clang_64/lib/IrcUtil.framework/Versions/3/IrcUtil (compatibility version 3.4.0, current version 3.4.0)
    /Users/jpnurmi/Qt/5.4/clang_64/lib/IrcModel.framework/Versions/3/IrcModel (compatibility version 3.4.0, current version 3.4.0)
    /Users/jpnurmi/Qt/5.4/clang_64/lib/IrcCore.framework/Versions/3/IrcCore (compatibility version 3.4.0, current version 3.4.0)
    /Users/jpnurmi/Qt/5.4/clang_64/lib/QtQml.framework/Versions/5/QtQml (compatibility version 5.4.0, current version 5.4.2)
    /Users/jpnurmi/Qt/5.4/clang_64/lib/QtNetwork.framework/Versions/5/QtNetwork (compatibility version 5.4.0, current version 5.4.2)
    /Users/jpnurmi/Qt/5.4/clang_64/lib/QtCore.framework/Versions/5/QtCore (compatibility version 5.4.0, current version 5.4.2)
    /System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.0)
    /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 104.1.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)

The plugin is supposed to be copied to the right place by make install:

$ make install
[...]
cp -f "../../../qml/Communi/libcommuniplugin.dylib" "/Users/jpnurmi/Qt/5.4/clang_64/qml/Communi/libcommuniplugin.dylib"
[...]
cp -f "../../../qml/Communi/libcommuniplugin_debug.dylib" "/Users/jpnurmi/Qt/5.4/clang_64/qml/Communi/libcommuniplugin_debug.dylib"
[...]
jbltx commented 9 years ago

I don't have .dylib but .a because I made a qmake -config static -config release, so I have static libs.

I'm just trying to install the lib in shared configuration and that's working fine. Is it impossible to use static libs for QML ?

jpnurmi commented 9 years ago

Would it be an option to build communi into your app: http://communi.github.io/doc/3.3/usage.html ? Then you'd need to register the QML types yourself, but it's straight-forward: http://communi.github.io/doc/3.3/qml.html

jpnurmi commented 9 years ago

Fixed in the 3.4 and master branches. Tested with a static build of Qt 5.5 on OSX.