Re: plugins in OSX, I also discovered this, but what I do, every time
after I rebuild my plugin and copy it to inside Qt Creator, I run a
shell script to fixup the paths, I've included it below. It might be
useful for you also.
Rgrds Henry
-----------------------------------------------------------------------------------
#!/bin/bash
#
# HS 2014-02-07 Updated for Qt 5.2
# HS 2014-02-22 Qt 5.2.1
# HS 2014-05-21 Qt 5.3.1 and Qt Creator 3.1.2
# HS 2015-01-04 Qt 5.4 and Qt Creator 3.3
#
# Solve the double QT runtime problem in OSX for QtCreator plugins by
running install_name_tool on our plugin dll.
# This will change the pickup path for the common five framework DLLs
used by most plugins:
# QtCore, QtConcurrent, QtGui, QtNetwork and QtWidgets.
# So we change the path from the "unbundled" compiler specific
framework versions to the "bundled" ones inside the QtCreator app.
#
install_name_tool -change
/Users/henry/Qt/5.4/clang_64/lib/QtWidgets.framework/Versions/5/QtWidgets
/Users/henry/Qt/Qt\
Creator.app/Contents/Frameworks/QtWidgets.framework/Versions/5/QtWidgets
/Users/henry/Qt/Qt\ Creator.app/Contents/PlugIns/myFancyPlugin.dylib
install_name_tool -change
/Users/henry/Qt/5.4/clang_64/lib/QtGui.framework/Versions/5/QtGui
/Users/henry/Qt/Qt\
Creator.app/Contents/Frameworks/QtGui.framework/Versions/5/QtGui
/Users/henry/Qt/Qt\ Creator.app/Contents/PlugIns/myFancyPlugin.dylib
install_name_tool -change
/Users/henry/Qt/5.4/clang_64/lib/QtCore.framework/Versions/5/QtCore
/Users/henry/Qt/Qt\
Creator.app/Contents/Frameworks/QtCore.framework/Versions/5/QtCore
/Users/henry/Qt/Qt\ Creator.app/Contents/PlugIns/myFancyPlugin.dylib
install_name_tool -change
/Users/henry/Qt/5.4/clang_64/lib/QtConcurrent.framework/Versions/5/QtConcurrent
/Users/henry/Qt/Qt\
Creator.app/Contents/Frameworks/QtConcurrent.framework/Versions/5/QtConcurrent
/Users/henry/Qt/Qt\ Creator.app/Contents/PlugIns/myFancyPlugin.dylib
install_name_tool -change
/Users/henry/Qt/5.4/clang_64/lib/QtNetwork.framework/Versions/5/QtNetwork
/Users/henry/Qt/Qt\
Creator.app/Contents/Frameworks/QtNetwork.framework/Versions/5/QtNetwork
/Users/henry/Qt/Qt\ Creator.app/Contents/PlugIns/myFancyPlugin.dylib
-----------------------------------------------------------------------------------
On 2015-02-06 09:22, Ziller Eike wrote:
>
>> On Jan 31, 2015, at 13:10, Maskim Klimov <[email protected]> wrote:
>>
>> It looks like there are some problems with running QtCreator external
>> plugins under Mac OS X.
>> 1. The function "bool MimeDatabase::addMimeTypes(const QString &fileName,
>> QString *errorMessage)".
>> It simply opens the file and passes it to "bool
>> MimeDatabasePrivate::addMimeTypes(QIODevice *device, const QString
>> &fileName, QString *errorMessage)». But It fails to open the file from
>> plugin project resources under Mac OS X. On the contrary, manual file
>> opening and invoking "bool MimeDatabase::addMimeTypes(QIODevice *device,
>> QString *errorMessage)» works good.
>> It seems like resource files are not shared between the plugin and QtCreator
>> instance (may be it is global problem with Qt resources under Mac OS X).
>>
>> 2. Pure virtual method QWidget* Core::IOptionsPage::widget().
>> I implemented derived class with constructor that set desired options
>> category, icon, etc. I overrode this function with simple creation of
>> QWidget (or derived class) instance. On the QtCreator’ option page I can see
>> my option category but a click on it leads to QtCreator’ crash with message
>> "QWidget: Must construct a QApplication before a QWidget».
>>
>> By the way, I have no such problems under Linux.
>
> If you run your plugin against a Qt Creator binary package on OS X, you must
> make sure that you change your plugin’s referred to install names to the Qt
> frameworks from absolute paths to something that resolves to the Qt libraries
> that are shipped with Qt Creator. If you don’t, the dynamic linker will load
> two instances of the Qt libraries, which sounds like it could lead to the
> problems you observe above. You probably get messages on the console/terminal
> from the dynamic linker that symbols are defined twice and it is undefined
> which are taken in which situations.
>
> If you run "otool -L" on your libMyPlugin.dylib you’ll see stuff like
> /Users/Shared/qt/qt/5.4/64/qtbase/lib/QtCore.framework/Versions/5/QtCore
> (compatibility version 5.4.0, current version 5.4.2)
>
> You need to change these paths to
> "@rpath/Frameworks/QtCore.framework/Versions/5/QtCore” etc with
> install_name_tool, e.g.
> install_name_tool -change
> /Users/Shared/qt/qt/5.4/64/qtbase/lib/QtCore.framework/Versions/5/QtCore
> @rpath/Frameworks/QtCore.framework/Versions/5/QtCore libMyPlugin.dylib
>
> The rpath of your plugin should already have a sensible value (including
> @executable_path/../). You can check by running “otool -l” (lower-case L) on
> your plugin library and look for cmd LC_RPATH entries (there can be multiple).
>
> Br, Eike
>
_______________________________________________
Qt-creator mailing list
[email protected]
http://lists.qt-project.org/mailman/listinfo/qt-creator