Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Qt 5 cannot deploy on SnowLeopard

I have an issue where my app doesn't run on 10.6 Snow Leopard.

I compile with these parameters:

qmake LSPRO.pro -r -spec macx-clang CONFIG+=release CONFIG+=x86_64

in my Pro file, I have these elements:

TEMPLATE = app
HEADERS = \
    mainwindow.h \
    app_mediamanager.h \
    api.h \
    tool_htmleditor.h \
    tool_videoencoder.h \
    tool_thumbnaileditor.h
SOURCES = \
    main.cpp \
    mainwindow.cpp \
    app_mediamanager.cpp \
    api.cpp \
    tool_htmleditor.cpp \
    tool_videoencoder.cpp \
    tool_thumbnaileditor.cpp

QT += network webkitwidgets widgets concurrent sql

QMAKE_CXXFLAGS_X86_64 += -mmacosx-version-min=10.6
QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.6

ICON = icon.icns

RESOURCES = lspro.qrc

But even with a simple Hello world or the example files, it doesn't work...

I add the libraries with macdeployqt script. When running on 10.6 I get this as error in the report:

Dyld Error Message:
  Library not loaded: /usr/lib/libc++.1.dylib
  Referenced from: /Users/username/Desktop/LSPRO.app/Contents/MacOS/../Frameworks/QtWebKitWidgets.framework/Versions/5/QtWebKitWidgets
  Reason: image not found

The question is simple: How can I target 10.6 from a clean Qt5 in 10.8?


Update 1:

Thanks to the comments, it looks like 10.6 didn't shipped with c++11 support yet, causing the app to crash when looking for it. I tried 2 solutions:

Failed solution1 : I rebuild Qt5 with the noc++11 flag, the resulting app starts on snowleopard but fails some inner elements Videoplayer missing in Qwebkit, unable to call external binary /execute command (app crashes with EXC_BAD_ACCESS) although the binary just runs fine when called directly and probably more undiscovered.

Failed solution2 : I tried naively to include the missing dylibs (libc++.1.dylib and libc++abi.dylib) in snowleopard, but the app still crashes with the message :

Dyld Error Message:
  Symbol not found: _NSPreferredScrollerStyleDidChangeNotification
  Referenced from: /Volumes/SANS TITRE/tests/LSPRO1.app/Contents/MacOS/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets
  Expected in: /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit

otool -L of a 5.1.0 rc1 build

@executable_path/../Frameworks/QtWebKitWidgets.framework/Versions/5/QtWebKitWidgets (compatibility version 5.1.0, current version 5.1.0)
    @executable_path/../Frameworks/QtQuick.framework/Versions/5/QtQuick (compatibility version 5.1.0, current version 5.1.0)
    @executable_path/../Frameworks/QtQml.framework/Versions/5/QtQml (compatibility version 5.1.0, current version 5.1.0)
    @executable_path/../Frameworks/QtNetwork.framework/Versions/5/QtNetwork (compatibility version 5.1.0, current version 5.1.0)
    @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore (compatibility version 5.1.0, current version 5.1.0)
    @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui (compatibility version 5.1.0, current version 5.1.0)
    @executable_path/../Frameworks/QtOpenGL.framework/Versions/5/QtOpenGL (compatibility version 5.1.0, current version 5.1.0)
    @executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets (compatibility version 5.1.0, current version 5.1.0)
    @executable_path/../Frameworks/QtPrintSupport.framework/Versions/5/QtPrintSupport (compatibility version 5.1.0, current version 5.1.0)
    /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 19.0.0)
    @executable_path/../Frameworks/QtWebKit.framework/Versions/5/QtWebKit (compatibility version 5.1.0, current version 5.1.0)
    @executable_path/../Frameworks/QtSql.framework/Versions/5/QtSql (compatibility version 5.1.0, current version 5.1.0)
    @executable_path/../Frameworks/QtSensors.framework/Versions/5/QtSensors (compatibility version 5.1.0, current version 5.1.0)
    @executable_path/../Frameworks/QtConcurrent.framework/Versions/5/QtConcurrent (compatibility version 5.1.0, current version 5.1.0)
    /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/AGL.framework/Versions/A/AGL (compatibility version 1.0.0, current version 1.0.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)

SOLUTION:

ok finally got it to work. Compiled Qt5 (5.1.2) on snowleopard from git (have xcode 4.2 with 10.6 sdk) in my case simply with these config:

./configure -developer-build -opensource -nomake examples -nomake tests -qt-sql-mysql

I had to fix small elements in my code making the app crash without reason (variable names..) and then everything was ok.

Just don't forget to use the mac deploy tool on 10.6 and the app runs ok on 10.8 (untested on 10.7 but I assume this is ok.)

Hope this helps anyone.

like image 654
Vincent Duprez Avatar asked Aug 10 '13 10:08

Vincent Duprez


2 Answers

The NSPreferredScrollerStyleDidChangeNotification notification is only available in OSX 10.7 and later, as noted at the bottom of this page:

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSScroller_Class/Reference/Reference.html

Qt will conditionally compile OS X 10.7 APIs if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7. See e.g.:

http://qt.gitorious.org/qt/qtbase/blobs/b9826799405293ee5969015eed37957daad198ee/src/widgets/styles/qmacstyle_mac.mm

Possibly the version of Qt you are using was not compiled with the 10.6 SDK.

There is a known issue: "To use Qt on or for 10.6, you need to build Qt yourself on a 10.6 machine":

http://qt-project.org/wiki/Qt500KnownIssues

like image 118
Ross Bencina Avatar answered Oct 20 '22 07:10

Ross Bencina


If you're using Qt 5.1 this is a known issue with macdeployqt, it does not correct linked library paths on the executable, you can see it by yourself with

otool -L <executable>

You can either switch back to Qt 5.1.0-rc1 or in this thread there is a workaround with a script that will fix the problem for you.

like image 45
stepanbujnak Avatar answered Oct 20 '22 06:10

stepanbujnak