[solved] My app crashed after using macdeployqt (Qt5.2 RC 1)
-
Thanks for your advice, but the point is frameworks and executable flag don't reference the plugins directly , so how can i know which one is referencing the plugins? I think my app loads right frameworks but wrong plugins. and otool can get information of frameworks reference only
-
That's what DYLD_PRINT_LIBRARIES=1 helps you find, you can also guess a bit knowing what you are using in your software (image formats, printing, networking etc…)
-
for example, libqcorewlanbearer.dylib is in the bundle, the following is the "otool -L" information
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/Users/gint_develop/Desktop/1Checker.app/Contents/PlugIns/bearer/libqcorewlanbearer.dylib:
libqcorewlanbearer.dylib (compatibility version 0.0.0, current version 0.0.0)
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 945.16.0)
/System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration (compatibility version 1.0.0, current version 453.19.0)
/System/Library/Frameworks/CoreWLAN.framework/Versions/A/CoreWLAN (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/Security.framework/Versions/A/Security (compatibility version 1.0.0, current version 55179.11.0)
@executable_path/../Frameworks/QtNetwork.framework/Versions/5/QtNetwork (compatibility version 5.2.0, current version 5.2.0)
@executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore (compatibility version 5.2.0, current version 5.2.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 56.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 744.18.0)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////but when I use "DYLD_PRINT_LIBRARIES=1", I find the app loaded a wrong libqcorewlanbearer.dylib and its dependencies.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
dyld: loaded: /Users/gint_develop/Qt5.2.0/5.2.0/clang_64/plugins/bearer/libqcorewlanbearer.dylib
dyld: loaded: /System/Library/Frameworks/CoreWLAN.framework/Versions/A/CoreWLAN
dyld: loaded: /Users/gint_develop/Qt5.2.0/5.2.0/clang_64/lib/QtNetwork.framework/Versions/5/QtNetwork
dyld: loaded: /Users/gint_develop/Qt5.2.0/5.2.0/clang_64/lib/QtCore.framework/Versions/5/QtCore
dyld: loaded: /usr/lib/libpcap.A.dylib
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
you can get my bundle "here":https://drive.google.com/uc?id=0B0lyTclIaUOPOUI4MmpZaHZiN3c&export=download -
Ok… There might be something funky with qt.conf's usage, I tried to start your application setting QT_PLUGIN_PATH to point to your bundle plugin path and it's working fine.
Have a look at the Mac Deployment Documentation, they explain how to add the path to the bundle plugin directory when starting your application, that should workaround your current problem
-
I think it is (or at least I don't see any reason right now that it would not be)
That's why I suggested to use the addLibraryPath() technique in between
-
then I added the following code to main.cpp, didn't work at all.
QDir dir(QApplication::applicationDirPath());
qDebug()<<dir.absolutePath(); dir.cdUp(); qDebug()<<dir.absolutePath(); dir.cd("PlugIns"); qDebug()<<dir.absolutePath(); QCoreApplication::addLibraryPath(dir.absolutePath());
-
And if you use setLibraryPath ?
-
Like this? it doesn't work either.
QDir dir(QApplication::applicationDirPath());
qDebug()<<dir.absolutePath();
dir.cdUp();
qDebug()<<dir.absolutePath();
dir.cd("PlugIns");
qDebug()<<dir.absolutePath();
QApplication::setLibraryPaths(QStringList(dir.absolutePath())); -
And we shouldn't forget this, maybe it's a important clue.
the macdeployqt tool even didn't copy the plugins into the bundle at the first time, I did this by hand. And later the app loaded them incorrectly no matter how I modify the Path in qt.conf file or in source code. -
In between, did you update to 5.2 since it's been officially released ?
-
how do you set QT_PLUGIN_PATH ? show me plz.
[quote author="SGaist" date="1387459417"]Ok… There might be something funky with qt.conf's usage, I tried to start your application setting QT_PLUGIN_PATH to point to your bundle plugin path and it's working fine.Have a look at the Mac Deployment Documentation, they explain how to add the path to the bundle plugin directory when starting your application, that should workaround your current problem[/quote]
-
QT_PLUGIN_PATH=/Users/username/Downloads/1Checker.app/Contents/PlugIns/ ./1Checker.app/Contents/MacOS/1Checker
-
are you sure it is working fine after setting QT_PLUGIN_PATH to point to your bundle plugin path , I
This is my QT_PLUGIN_PATH, but my app is yet to be launched.
//////////////////////////////////////////////////////////////////
gint-developtekiMacBook-Pro:~ gint_develop$ echo $QT_PLUGIN_PATH
/Users/gint_develop/Desktop/1Checker.app/Contents/MacOS/1Checker -
you can try with:
@ export QT_PLUGIN_PATH=/Users/username/Downloads/1Checker.app/Contents/PlugIns/
@
then
@
./1Checker.app/Contents/MacOS/1Checker
@I have three warnings about QEventLoop but I can see your application login screen
-
@gint-developtekiMacBook-Pro:~ gint_develop$ export QT_PLUGIN_PATH="/Users/gint_develop/Desktop/1Checker.app/Contents/PlugIns"
gint-developtekiMacBook-Pro:~ gint_develop$ cd ~/Desktop/
gint-developtekiMacBook-Pro:Desktop gint_develop$ ./1Checker.app/Contents/MacOS/1Checker
QEventLoop: Cannot be used without QApplication
QObject::moveToThread: Current thread (0x103e079f0) is not the object's thread (0x103e0c800).
Cannot move to target thread (0x103e079f0)On Mac OS X, you might be loading two sets of Qt binaries into the same process. Check that all plugins are compiled against the right Qt binaries. Export DYLD_PRINT_LIBRARIES=1 and check that only one set of binaries are being loaded.
QObject::moveToThread: Current thread (0x103e079f0) is not the object's thread (0x103e0c800).
Cannot move to target thread (0x103e079f0)On Mac OS X, you might be loading two sets of Qt binaries into the same process. Check that all plugins are compiled against the right Qt binaries. Export DYLD_PRINT_LIBRARIES=1 and check that only one set of binaries are being loaded.
QEventLoop: Cannot be used without QApplication
QEventLoop: Cannot be used without QApplication
objc[3729]: Class NotificationReceiver is implemented in both /Users/gint_develop/Desktop/1Checker.app/Contents/Frameworks/QtWidgets.framework/Versions/5/QtWidgets and /Users/gint_develop/Qt5.2.0/5.2.0/clang_64/lib/QtWidgets.framework/Versions/5/QtWidgets. One of the two will be used. Which one is undefined.
objc[3729]: Class QCocoaPageLayoutDelegate is implemented in both /Users/gint_develop/Desktop/1Checker.app/Contents/Frameworks/QtPrintSupport.framework/Versions/5/QtPrintSupport and /Users/gint_develop/Qt5.2.0/5.2.0/clang_64/lib/QtPrintSupport.framework/Versions/5/QtPrintSupport. One of the two will be used. Which one is undefined.
objc[3729]: Class QCocoaPrintPanelDelegate is implemented in both /Users/gint_develop/Desktop/1Checker.app/Contents/Frameworks/QtPrintSupport.framework/Versions/5/QtPrintSupport and /Users/gint_develop/Qt5.2.0/5.2.0/clang_64/lib/QtPrintSupport.framework/Versions/5/QtPrintSupport. One of the two will be used. Which one is undefined.
QObject::moveToThread: Current thread (0x103e079f0) is not the object's thread (0x103e0c800).
Cannot move to target thread (0x103e079f0)On Mac OS X, you might be loading two sets of Qt binaries into the same process. Check that all plugins are compiled against the right Qt binaries. Export DYLD_PRINT_LIBRARIES=1 and check that only one set of binaries are being loaded.
This application failed to start because it could not find or load the Qt platform plugin "cocoa".Available platform plugins are: cocoa, minimal, offscreen.
Reinstalling the application may fix this problem.
Abort trap: 6@ -
If you rename your Qt folder does it also fail ?