MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
Qtの設定 - エラーのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
Qtの設定 - エラー
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == ここでは、Qt CreatorおよびQt Designerに関する様々なエラーと解決方法を記載する。<br> <br><br> == エラー : LNK1158 == エラー内容<br> fatal error LNK1158: cannot run ‘rc.exe’が発生する <br> 解決方法<br> C:\Program Files (x86)\Windows Kits\<バージョン名>\bin\x64ディレクトリにあるrc.exeとrcdll.dllを C:\Program Files (x86)\Microsoft Visual Studio <バージョン名>\VC\bin\amd64にコピーする。 <br> 詳細は、以下のWebサイトを参照すること。<br> http://motchy99.blog.fc2.com/blog-entry-97.html<br> <br><br> == エラー : LNK2005 == エラー内容<br> fatal error LNK2005 * mainwindow.obj:-1: エラー: LNK2005: "class QDataStream & __cdecl operator<<(class QDataStream &,class Person const &)" (??6@YAAEAVQDataStream@@AEAV0@AEBVPerson@@@Z) は既に main.obj で定義されています。 <br> 解決方法<br> 多重インクルードが発生しているため、多重インクルードを回避する。 <br><br> == Qt WebEngine使用時のビルドエラー == Qt 5において、Qt WebEngine(QWebEngineViewクラス等を使用して、<code>QT += webengine</code>を有効にする時)を使用してビルドする時、以下に示すようなビルドエラーが発生する場合がある。<br> # ビルドエラーの例 /usr/bin/ld: /<Qt 5のインストールディレクトリ>/<Qt 5のバージョン>/gcc_64/lib/libQt5WebEngineCore.so: .dynsym local symbol at index 3 (>= sh_info of 3) /usr/bin/ld: /<Qt 5のインストールディレクトリ>/<Qt 5のバージョン>/gcc_64/lib/libQt5WebEngineCore.so: .dynsym local symbol at index 5 (>= sh_info of 3) /usr/bin/ld: /<Qt 5のインストールディレクトリ>/<Qt 5のバージョン>/gcc_64/lib/libQt5WebEngineCore.so: .dynsym local symbol at index 6 (>= sh_info of 3) ... 略 <br> これを回避するには、以下に示す2つの方法がある。<br> * 方法 1 ** まず、binutils-goldライブラリをインストールする。 **: <code>sudo zypper install binutils-gold</code> ** 次に、Qtプロジェクトファイル(.pro拡張子)において、リンカーフラグを設定する。 **: <code>CONFIG += use_gold_linker</code> *: <br> * 方法 2 ** まず、lldライブラリをインストールする。<br>なお、LLVMのソースコードから、ビルドおよびインストールしてもよい。 **: <code>sudo zypper install lld</code> ** 次に、Qtプロジェクトファイル(.pro拡張子)において、リンカーフラグを設定する。 **: <code>CONFIG += use_lld_linker</code> ** もし、CMakeを使用している場合は、CMakeファイルにおいて、リンカーフラグを指定する。 **: <code>if (UNIX)</code> **:: <code>set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold")</code> **:: <code>set(CMAKE_CC_FLAGS "${CMAKE_CC_FLAGS} -fuse-ld=gold")</code> **:: <code>set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-ld=gold")</code> **: <code>endif()</code> <br><br> == QMLのコンパイルエラー == 変数<code>RESOURCES</code>に重複した値がある場合、以下に示すエラーが発生する。<br> redefinition of 'int qInitResources_qml()' <br><br> == リンカーエラー : undefined reference to 'vtable for 〜' == 該当のソースファイルにおいて、mocファイルを直接インクルードする。<br> <syntaxhighlight lang="c++"> // *.cppファイル class SampleClass : public QObject { Q_OBJECT // ...略 }; int main(int argc, char *argv[]) { // ...略 } // mocファイルを明示的にインクルード #include "main.moc" </syntaxhighlight> <br> <code>#include "main.moc"</code>は、Qtのメタオブジェクトコンパイラ(moc)により生成されたメタデータを含むソースファイルを現在のファイルに含めるために使用される。<br> このメタデータは、Qtのシグナルとスロットのメカニズム、QObjectクラスの継承、および、<code>Q_OBJECT</code>マクロの使用に関連している。<br> <br> <code>Q_OBJECT</code>マクロを含むクラスが存在する場合、mocファイルが自動生成されてプロジェクトのビルドプロセスに自動的に組み込まれる。<br> 一般的に、mocファイルは自動的に処理されるため、mocファイルを明示的にインクルードする必要はない。<br> <br> しかし、特定のケースでは、mocファイルを明示的にインクルードする必要がある。<br> これは、以下に示すような状況で発生する。<br> * ソースファイル (cpp拡張子) が<code>Q_OBJECT</code>マクロを含むクラス定義とその実装を両方を含んでおり、<br>プロジェクトファイル(.proまたはCMakeLists.txt)において、ヘッダファイルとしてではなくソースファイルとしてリストされている場合。 * ソースファイルがテンプレートクラスや特殊なビルドシナリオを含む等、mocによる自動処理が適切に行われない場合。 <br> ソースファイルにおいて、<code>#include "main.moc"</code>を明示的に使用する必要があるかどうかを確認する場合は、<br> クラスの定義と実装が同じソースファイル内にあり、かつ、ソースファイルがmocプロセスによって自動的に処理されない状況にあるかどうかに依存する。<br> <br> 多くのQtプロジェクトでは、ソースファイルとヘッダファイルを分けて、明示的なmocファイルのインクルードを避ける慣習がある。<br> その場合、qmakeコマンドやcmakeコマンドは、必要なmoc処理を自動的に行うため、mocファイルを直接インクルードする必要はない。<br> <br><br> __FORCETOC__ [[カテゴリ:Qt]]
Qtの設定 - エラー
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse