質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Qt

QtはGUIプログラムの開発で広く使われているクロスプラットフォーム開発のフレームワークです。

Q&A

解決済

4回答

2237閲覧

qtのデプロイについて

torimingo

総合スコア122

Qt

QtはGUIプログラムの開発で広く使われているクロスプラットフォーム開発のフレームワークです。

0グッド

0クリップ

投稿2018/12/23 12:54

qt creatorで作ったサンプルアプリのデプロイ方法がよくわかりません。
デプロイ自体初めてで、自分が行ったことがデプロイというのかもわかりません。
デプロイとは、アプリケーションを配布可能な状態へ持っていくことだと、自分では思っています。
環境はubuntuで、以下のURLを参考にしながらデプロイを進めてみました。
http://doc.qt.io/qt-5/linux-deployment.html
デプロイしたのは、basiclayoutsというサンプルアプリで、ウィンドウとウィジェットから成り、機能などは持たせていません。
(ボタンを押しても、反応しないように作っています)

結果からいいますと、basiclayoutsを実行ファイルとして生成することはできまして、起動することもできました。
しかし、qtの静的リンク?でデプロイしたはずなのに、他のパソコンにコピーしても、動きませんでした。

以下は、自分が試した手順です。
「/opt/Qt/5.10.1/Src」に移動。
「sudo ./configure -prefix /opt/Qt/5.10.1/ -sysconfdir /etc/xdg -confirm-license -opensource -static -dbus-linked -openssl-linked -system-harfbuzz -system-sqlite -nomake examples -no-rpath -skip qtwebengine」を実行。
「sudo make」を実行。
basiclayoutsのソースのあるディレクトリへ移動。
「qmake -config release」を実行。
「make」を実行。
以上

./configureを実行したときのオプションが多すぎたのか、sudo makeが終わるまでに数時間かかりました。
./configureのオプションについては、以下を参照しました。
https://stackoverflow.com/questions/43435093/how-can-i-build-fully-static-qt-application-in-linux

自分が行ったデプロイの方法が間違っているのは、なんとなくわかるんですが、何が間違っているのかわかりません。
もしご存知の方がおられましたら、教えて頂けないでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fu7mu4

2018/12/23 14:12

確認したいことが3つあります。 1) ```bash qmake -config release ``` を実行する前に静的ライブラリとしてビルドしたQtへのパスを設定していますでしょうか? 2)-prefixは--prefix=でしょうか?その場合ビルドしたQtライブラリは/opt/Qt/5.10.1/binなどにありますでしょうか? 3)デプロイして動作確認されたとありますが、それは開発したUbuntuと同じバージョンでしょうか?
torimingo

2018/12/23 14:43

回答いたします。 (1)環境変数「PATH」に「/opt/Qt/5.10.1/gcc_64/bin/」を設定していました。しかし、このディレクトリに入っている「qmake」などの実行ファイルの更新日付は、本日ではなくだいぶ昔になっています。「./configure 〜」と「sudo make」で、なにが生成されたのか、よくわかっていません・・・。PATHに設定したディレクトリを間違えているかもしれません・・・。 (2)-prefixは、-prefixです。--prefix=が正しそうな気が、たしかにします。 「/opt/Qt/5.10.1/gcc_64/bin」以下にqmakeなどがあるのですが、これがQtライブラリと呼べるものなのか、わかりません。「/opt/Qt/5.10.1/Src/qttools/bin」というディレクトリもあります。qttools以外にも「/opt/Qt/5.10.1/Src」内にはqt関連のディレクトリが多数あり、それらの中にもbinフォルダがあります。こちらは更新日付が本日になっています。 (3)動作確認をしたのは、Raspberry Piという小型PCで、ubuntuではないものです。
torimingo

2018/12/23 14:52

ディレクトリを調べていたら、本日の日付のqmakeを2つ発見しました。しかし、サイズが異なります。  /opt/Qt/5.10.1/Src/qtbase/bin/qmake サイズ:24391528  /opt/Qt/5.10.1/Src/qtbase/qmake/qmake サイズ:24392352
fermat

2018/12/23 23:45

>他のパソコンにコピーしても、動きませんでした。 動かなかったとき、何かエラーメッセージ出ませんでしたか? 「コンピューターにQt5Cored.dllがないため、プログラムを開始できません・・・」とか 「This application failed to start because・・・」みたいな。
torimingo

2018/12/24 00:24

>動かなかったとき、何かエラーメッセージ出ませんでしたか? Raspberry Piでは「バイナリファイルを実行できません:実行形式エラー」というエラーメッセージが出力されました。
torimingo

2018/12/24 01:00

今朝、いろいろ見直してみたところ「/opt/Qt/5.10.1/」のなかには、qmakeという実行ファイルが複数あることがわかりました。 先日「qmake -config release」で使っていたqmakeは更新日付が古く、先日ビルドしたものではなかったので、更新日付が新しいqmake(先日ビルドしたもの)を使って「qmake -config release」「make」を実行したところ、サイズの大きなbasiclayouts(アプリの実行ファイル)を生成することができました。 サイズが大きいということは、Qtライブラリが静的にリンクされたのかもしれません。 lddコマンドでリンクされたライブラリの数を比較してみたところ、先日、古いqmakeでビルドしたbasiclayoutsよりも多いことはわかりました。しかし、先日ビルドしたbasiclayoutsにはリンクされていた「libQt5Widgets.so.5」「libQt5Core.so.5」などが、本日ビルドしたbasiclayoutsにはリンクされていませんでした・・・(苦笑) デプロイってこんなにややこしいものなのでしょうか・・・(;。;)
fermat

2018/12/24 01:04 編集

おおお!解決しましたか(?)よかったよかった。 C++ってやたらと繊細ですよね(-"-)
fu7mu4

2018/12/24 03:36

1) sudo makeはビルドのみ行うため、目的の場所にqtはありません。それは前回のビルド成果物です。 目的の場所にインストールするには make installが必要ではないですか? 2) -prefixがただしいか --prefix がただしいかは ./configure --helpコマンドの出力で確認してください。 3) Raspberry Piという小型PC は UbuntuとCPUの種類が異なるため、この方法では実行できません。
guest

回答4

0

Qtのビルド方法の間違いを指摘します。

ソースの場所

bash

1cd /opt/Qt/5.10.1/Src #ソースのある場所に移動

ここはOKですが、通常は ホーム以下にwork ディレクトリを作成してその中にqtのソースを置いて行ないます。

Qtのビルド設定

bash

1sudo ./configure --prefix /opt/Qt/5.10.1/ -sysconfdir /etc/xdg -confirm-license -opensource -static -dbus-linked -openssl-linked -system-harfbuzz -system-sqlite -nomake examples -no-rpath -skip qtwebengine

./configure は通常一般ユーザーの権限で実行するため sudo は不要です。
./configure のオプションについては 以下のように実行するとヘルプが表示されるので確認してください。通常 prefix は --prefix==/path/to/dir のように書きます。これはビルドしたQtライブラリ等の保管場所です。

bash

1./configure --help

このconfigureのオプションが正しくない場合、それぞれの値がデフォルトになるため prefix は /usr/local としてmakefile などが生成されているかもしれません。

*** Qtのビルド ***

bash

1sudo make

通常makeにsudo は不要です。
これは単純にビルドするだけになります。そのためインストールされていません。

prefixで指定したフォルダ以下にインストールするには
ビルド後に次のようにコマンドを実行します。

bash

1sudo make install

投稿2018/12/24 03:27

fu7mu4

総合スコア1088

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

torimingo

2018/12/24 04:00

ビルド方法の指摘をありがとうございます。 --prefixは、sudo make installで実行ファイルが配置されるパスを指定するオプションだったのですね。 勉強になりました!
guest

0

ベストアンサー

アーキテクチャが異なるため動作しません。CPUの種類が違うという意味です。

バイナリファイルを実行できません:実行形式エラー とはそういう意味です。

Ubuntu はおそらく amd64(x86_64)アーキテクチャでraspberry piはarm64アーキテクチャなのでバイナリの種類が異なるため動作しません。

amd64バイナリをraspberry pi上に持っていってもダメです。
これを解決するには、Ubuntu上でarm64バイナリを生成するクロスコンパイルを行うか
qemuなどのCPUエミュレータを使用する方法のどちらかです。

通常はraspberry pi上でqemuを使用しません。なぜなら処理能力が低いからです。
そのためクロスコンパイルがお勧めです。

投稿2018/12/24 03:13

fu7mu4

総合スコア1088

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fu7mu4

2018/12/24 03:39

バイナリのアーキテクチャを確認するには、バイナリをfileコマンドで調べましょう。 file /bin/ls とすると /bin/ls コマンドのアーキテクチャが確認できます。
torimingo

2018/12/24 03:56

アーキテクチャの調べ方をありがとうございます。 raspberry pi上で調査してみたいと思います。
torimingo

2018/12/25 01:50

ありがとうございます。 頑張ってみます!
guest

0

Qt のビルドに -opensource をつけているので Qtは GPLv3 か LGPLv3になります。
そして、Qt に静的にリンクしているので アプリも Qtのライセンスの影響を受けます。
そのため、アプリもQtのライセンスに従う必要があります。
デプロイ先が配布に該当する場合(自分以外の方に渡す場合など)、ライセンスを遵守できるかどうかを検討してください。

投稿2018/12/24 03:44

fu7mu4

総合スコア1088

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

もっと詳しい方がいらっしゃるのでその方のアンサーも仰いでみた方がいいとは思いますが・・・

リリースビルドまで終わっている状態で他のパソコンで動かないとのことですので、
Qtが全くインストールされていないPCでも動くように、
該当の実行ファイルと同じディレクトリに「platforms」フォルダをまるごとコピペして置いてみて下さい。
「platforms」フォルダはQt>>mingw>>plugins(※バージョンは省略)のところにあります。

投稿2018/12/24 00:58

fermat

総合スコア183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fu7mu4

2018/12/24 03:40

これは動的リンクですね。
fermat

2018/12/24 03:59 編集

これは静的リンクには関係ないことでしたか(;´`) 日本語の資料だけでQtから配布可能なファイルの作成までたどり着くって難しいので 今回、質問者ではありませんがとても勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問