Qt プログラムが突然終了する

プログラムを実行すると画面も表示されずに終了する。

Starting path\to\helloworld.exe...
プログラムが突然終了しました。
path\to\helloworld.exe crashed.
/path/to/helloworld を起動中...
プログラムが突然終了しました。
/path/to/helloworld がクラッシュしました

デバッグ実行すると次のメッセージが表示される。

During startup program exited with code 0xc0000139

f:id:renkin3q:20170908170346j:plain

原因1

C:\Windows\SysWOW64 に、他の libstdc++-6.dll がインストールされていたため。

解決方法1

ビルドに使った libstdc++-6.dll を実行ファイルと同じフォルダーにコピーする。

原因2

QApplication の派生クラスのコンストラクタの第1引数を “int argc” にしていたため。

解決方法2

“int &argc” に修正する。(QApplication の第1引数は “int &argc")

問題

.bbappend でファイルを追加した後、bitbake を実行したら次のエラーが発生した。

ERROR: Function failed: Fetcher failure for URL: 'file://<ファイル名>'. Unable to fetch URL from any source.
原因

ファイルのパスが探索パスに含まれていないため。

解決方法

ファイルが置いてあるフォルダーのパスを探索パスに追加する。 レシピに次の行を追加する。

  • フォルダー名=レシピ名の場合
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
  • フォルダー名が “files” の場合
FILESEXTRAPATHS_prepend := "${THISDIR}/files:"

ビルド前にプログラムの実行を停止する

Qt Creator でプログラム実行中にビルドを実行すると次のエラーが発生する。

:-1: エラー: cannot open output file debug\hello.exe: Permission denied
collect2.exe:-1: エラー: error: ld returned 1 exit status

プログラムを終了して、ビルドし直すと解消するが、面倒なので自動的に終了させるようにする。

次のバッチファイルを作成する。

taskkill.bat

taskkill.exe /im %1 /t 2>nul
exit 0

プロジェクトのビルドステップの Make ステップの前に独自プロセスステップを追加する。

  • コマンド: taskkill.bat
  • 引数: <実行ファイル名>
  • 作業ディレクトリー: <taskkill.bat のフォルダーパス>

QSqlDatabase: QMYSQL driver not loaded

QMYSQL プラグインのロードに失敗する。ロード時に次のメッセージが表示される。

QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7
原因

qsqlmysql.dll が libmysql.dll を参照できなかったため。

解決方法

環境変数 PATH に libmysql.dll のフォルダーパス “C:\Program Files (x86)\MySQL\MySQL Server 5.7\lib” を追加する。