Jump to content

Building QScintilla framework on macOS

From Qt Wiki
Revision as of 06:06, 30 October 2015 by Kylinsage (talk | contribs)

By default, dynamic libraries files(.dylib) are generated after building the QScintilla project. For Qt libraries are built in form of frameworks by default, we will creating QScintilla framework here.

Modify Qt4Qt5/qscintilla.pro

Change the line:

CONFIG += qt warn_off release thread exceptions

to:

CONFIG += qt warn_off release thread exceptions lib_bundle


Build and install

/usr/local/Qt/4.8.7/bin/qmake # Qt is located in /usr/local/Qt/4.8.7

make

make install

cp -f -R /path/to/src/Qt4Qt5/Qsci /usr/local/Qt/4.8.7/include/

cp -f /path/to/src/Qt4Qt5/qscintilla_cs.qm /usr/local/Qt/4.8.7/translations/

cp -f /path/to/src/Qt4Qt5/qscintilla_de.qm /usr/local/Qt/4.8.7/translations/

cp -f /path/to/srcqscintilla_es.qm /usr/local/Qt/4.8.7/translations/

cp -f /path/to/src/Qt4Qt5/qscintilla_fr.qm /usr/local/Qt/4.8.7/translations/

cp -f /path/to/src/Qt4Qt5/qscintilla_pt_br.qm /usr/local/Qt/4.8.7/translations/

cp -f -R /path/to/srcqsci /usr/local/Qt/4.8.7/

rm -f -r "/usr/local/Qt/4.8.7/lib/qscintilla2.framework"

cp -f -R "qscintilla2.framework" "/usr/local/Qt/4.8.7/lib/qscintilla2.framework"

cp -f /path/to/srcQt4Qt5/features/qscintilla2.prf /usr/local/Qt/4.8.7/mkspecs/features/


Build example-Qt4Qt5

Because we have built qscintilla2.framework, not qscintilla2.dylib,it is required to change applicatioin.pro:

CONFIG += release qscintilla2

macx {

   QMAKE_POST_LINK = install_name_tool -change libqscintilla2.12.dylib $$[QT_INSTALL_LIBS]/libqscintilla2.12.dylib $(TARGET)

}

HEADERS = mainwindow.h

SOURCES = main.cpp mainwindow.cpp

RESOURCES = application.qrc


to:

CONFIG += release

macx {

LIBS += -framework qscintilla2

}

HEADERS = mainwindow.h

SOURCES = main.cpp mainwindow.cpp

RESOURCES = application.qrc


then, we compile:

/usr/local/Qt/4.8.7/bin/qmake

make


Run the program:

open application.app

We encounter error:

LSOpenURLsWithRole() failed with error -10810 for the file /Users/frankshong/Studio/Qt/3rd_party/QScintilla/QScintillaQt4/example-Qt4Qt5/application.app.


View dependencies with otool -L


otool -L application.app/Contents/MacOS/application

application.app/Contents/MacOS/application:

qscintilla2.framework/Versions/12/qscintilla2 (compatibility version 12.0.0, current version 12.0.0)

/usr/local/Qt/4.8.7/lib/QtGui.framework/Versions/4/QtGui (compatibility version 4.8.0, current version 4.8.7)

/usr/local/Qt/4.8.7/lib/QtCore.framework/Versions/4/QtCore (compatibility version 4.8.0, current version 4.8.7)

/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)

/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 283.0.0)

By default, OS X searches framework in /Library/Frameworks, but qscintilla2.framework is located in Qt directory. So we must specify the path.


Change library path with nstall_name_tool

install_name_tool -change qscintilla2.framework/Versions/12/qscintilla2 /usr/local/Qt/4.8.7/lib/qscintilla2.framework/Versions/12/qscintilla2 application.app/Contents/MacOS/application


View depencies again:

otool -L application.app/Contents/MacOS/application

application.app/Contents/MacOS/application:

/usr/local/Qt/4.8.7/lib/qscintilla2.framework/Versions/12/qscintilla2 (compatibility version 12.0.0, current version 12.0.0)

/usr/local/Qt/4.8.7/lib/QtGui.framework/Versions/4/QtGui (compatibility version 4.8.0, current version 4.8.7)

/usr/local/Qt/4.8.7/lib/QtCore.framework/Versions/4/QtCore (compatibility version 4.8.0, current version 4.8.7)

/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)

/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 283.0.0)


All right. Now we run:

open application.app

To deploy the program, run:

macdeployqt application.app