[Qt-users:684] Raspberry Pi 版 Qt/QtCreator の自前ビルドについて

S.Fuchita fi7s-fct @ asahi-net.or.jp
2017年 9月 3日 (日) 11:23:30 JST


渕田@soramimi_jpです。


Raspberry Pi 用のQt開発環境の構築方法をまとめようとしているところです。
まだ公開前ですが、草稿を下記アドレスに置いてあります。

http://www.soramimi.jp/qt/raspberrypi201709/


Qtライブラリの方はビルドに成功しているのですが、Qt Creator が失敗してしまいます。
cpasterというプラグインのリンクで、QPrinterのコンストラクタが見つからない、
みたいなエラーが出ています。


pi @ beatrice:~/q/qt-creator-build/src/plugins/cpaster/frontend$ pwd
/home/pi/q/qt-creator-build/src/plugins/cpaster/frontend
pi @ beatrice:~/q/qt-creator-build/src/plugins/cpaster/frontend$ make
/usr/bin/g++ -mfloat-abi=hard -Wl,-z,origin '-Wl,-rpath,$ORIGIN/../../lib/qtcreator:$ORIGIN/../../lib/qtcreator/plugins:
$ORIGIN:$ORIGIN/..:$ORIGIN/../lib/qtcreator' -Wl,-O1 -Wl,-rpath,/opt/Qt5.9.1/lib -Wl,-rpath-link,/opt/vc/lib -Wl,-rpath-
link,/usr/lib/arm-linux-gnueabihf -Wl,-rpath-link,/lib/arm-linux-gnueabihf -o ../../../../libexec/qtcreator/cpaster .obj
/release-shared/protocol.o .obj/release-shared/pastebindotcomprotocol.o .obj/release-shared/pastebindotcaprotocol.o .obj
/release-shared/kdepasteprotocol.o .obj/release-shared/urlopenprotocol.o .obj/release-shared/argumentscollector.o .obj/r
elease-shared/main.o .obj/release-shared/moc_protocol.o .obj/release-shared/moc_pastebindotcomprotocol.o .obj/release-sh
ared/moc_pastebindotcaprotocol.o .obj/release-shared/moc_kdepasteprotocol.o .obj/release-shared/moc_urlopenprotocol.o   
-L/opt/vc/lib -L/home/pi/q/qt-creator-build/lib/qtcreator -L/home/pi/q/qt-creator-build/lib/qtcreator/plugins -lCore -lA
ggregation -lExtensionSystem -lUtils -L/opt/Qt5.9.1/lib -lQt5Widgets -lQt5Gui -lQt5Concurrent -lQt5Network -lQt5Core -lG
LESv2 -lpthread
/home/pi/q/qt-creator-build/lib/qtcreator/plugins/libCore.so: undefined reference to `QPrinter::QPrinter(QPrinter::Print
erMode)@Qt_5'
collect2: error: ld returned 1 exit status
Makefile:276: recipe for target '../../../../libexec/qtcreator/cpaster' failed
make: *** [../../../../libexec/qtcreator/cpaster] Error 1


このリンクコマンドの中に PrintSupport が見当たらないので、 -lQt5PrintSupport を加えて実行してみたところ、成功するようです。
Makefileの冒頭を見てみると、


#############################################################################
# Makefile for building: ../../../../libexec/qtcreator/cpaster
# Generated by qmake (3.1) (Qt 5.9.1)
# Project:  /home/pi/q/qt-creator/src/plugins/cpaster/frontend/frontend.pro
# Template: app
# Command: /opt/Qt5.9.1/bin/qmake -o Makefile /home/pi/q/qt-creator/src/plugins/cpaster/frontend/frontend.pro
#############################################################################

(中略)

LIBS          = $(SUBLIBS) -L/opt/vc/lib -L/home/pi/q/qt-creator-build/lib/qtcreator -L/home/pi/q/qt-creator-build/lib/q
tcreator/plugins -lCore -lAggregation -lExtensionSystem -lUtils -L/opt/Qt5.9.1/lib -lQt5Widgets -lQt5Gui -lQt5Concurrent
 -lQt5Network -lQt5Core -lGLESv2 -lpthread


の様になっていて、やはり -lQt5PrintSupport は存在していません。

このMakefileは /home/pi/q/qt-creator/src/plugins/cpaster/frontend/frontend.pro から生成されたもののようなので、
辿っていくと /home/pi/q/qt-creator/qtcreator.pri にたどり着きました。このファイルの下の方に、


# recursively resolve plugin deps
done_plugins =
for(ever) {
    isEmpty(QTC_PLUGIN_DEPENDS): \
        break()
    done_plugins += $$QTC_PLUGIN_DEPENDS
    for(dep, QTC_PLUGIN_DEPENDS) {
        dependencies_file =
        for(dir, QTC_PLUGIN_DIRS) {
            exists($$dir/$$dep/$${dep}_dependencies.pri) {
                dependencies_file = $$dir/$$dep/$${dep}_dependencies.pri
                break()
            }
        }
        isEmpty(dependencies_file): \
            error("Plugin dependency $$dep not found")
        include($$dependencies_file)
        LIBS += -l$$qtLibraryName($$QTC_PLUGIN_NAME)
    }
    QTC_PLUGIN_DEPENDS = $$unique(QTC_PLUGIN_DEPENDS)
    QTC_PLUGIN_DEPENDS -= $$unique(done_plugins)
}


と記述されていて、 QTC_PLUGIN_DEPENDS というのが関係ありそうかも、というところまでは分かりましたが、
これ以上、メイクスクリプトを調べるのは私には難しそうです。

qtcreator.pri を include している .pro ファイルが Makefile を生成する際、
ライブラリに -lQt5PrintSupport を追加できれば、先に進めると思うのですが、
その方法が分かりません。どなたか分かりませんか?


以上、よろしくお願いします。


Qt-users メーリングリストの案内