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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

MSYS

MSYS(Minimal SYStem)は、Windows上で動くUnixシェル、テキスト操作ユーティリティなどをまとめたパッケージ。C言語やFortranのコンパイラであるMinGWをカバーする目的で作られています。

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

GTK+

GTK+とはGUIを作るために作られた、とても使いやすく機能に富んだツールキットです。クロスプラットフォームによる互換性と、使いやすいAPIを備えています。

Q&A

2回答

6244閲覧

C言語/GTKをgccでコンパイルをしようとしたが"No such file or directory"エラーが起こり困っている

AIUE-kun

総合スコア9

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

MSYS

MSYS(Minimal SYStem)は、Windows上で動くUnixシェル、テキスト操作ユーティリティなどをまとめたパッケージ。C言語やFortranのコンパイラであるMinGWをカバーする目的で作られています。

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

GTK+

GTK+とはGUIを作るために作られた、とても使いやすく機能に富んだツールキットです。クロスプラットフォームによる互換性と、使いやすいAPIを備えています。

0グッド

0クリップ

投稿2021/07/16 06:53

編集2021/07/31 15:52

前提・実現したいこと

C言語/GTKを公式サイトのサンプルコード("gtk_test.c"で保存した)をコンパイル・実行ができるようにしたい。

発生している問題・エラーメッセージ

サンプルコードをコンパイルしたときは以下のような結果になってしまった。

console

1$ gcc -o gtk_test gtk_test---.c 'pkg-config --cflags --libs gtkmm-3.0' 2gcc.exe: error: pkg-config --cflags --libs gtkmm-3.0: No such file or directory

(追記)
この部分が解決できていない。
また、Visual Studio Codeを利用しているが「#includeエラーが検出されました。includePathを更新してください。」と「ソースファイルを開けません"glibconfig.h"(dependency of "gtk/gtk.h")」の2つのエラーが出ています。そのためc_cpp_ptoprtyird.jsonを

"includePath": [ "${workspaceFolder}/**", "C:/msys64/mingw64/include/gtk-3.0", "C:/msys64/mingw64/include/glib-2.0" ],

に変更したが改善は見られなかった。
("C:/msys64/mingw64/include/glib-2.0"に関しては「ソースファイルを開けません"glib.h"(dependency of "gtk/gtk.h")」とエラーがでたため追記したが)

(追記)
この部分は"C:\MinGW\bin"から"C:\msys64\mingw64\bin"に変更した後、以下のようになってエラーはでなくなった。
MSYS2にて'pkg-config --cflags --libs gtkmm-3.0'を確認しようとした結果は

console

1$ pkg-config --cflags --libs gtkmm-3.0 2-IC:/msys64/mingw64/bin/../include/gtkmm-3.0 -IC:/msys64/mingw64/bin/../lib/gtkmm-3.0/include -IC:/msys64/mingw64/bin/../include/giomm-2.4 -IC:/msys64/mingw64/bin/../lib/giomm-2.4/include -IC:/msys64/mingw64/bin/../include -IC:/msys64/mingw64/bin/../include/glib-2.0 -IC:/msys64/mingw64/bin/../lib/glib-2.0/include -mms-bitfields -IC:/msys64/mingw64/bin/../include/glibmm-2.4 -IC:/msys64/mingw64/bin/../lib/glibmm-2.4/include -IC:/msys64/mingw64/bin/../include/sigc++-2.0 -IC:/msys64/mingw64/bin/../lib/sigc++-2.0/include -IC:/msys64/mingw64/bin/../include/gtk-3.0 -IC:/msys64/mingw64/bin/../include/pango-1.0 -IC:/msys64/mingw64/bin/../include/harfbuzz -IC:/msys64/mingw64/bin/../include/freetype2 -IC:/msys64/mingw64/bin/../include/libpng16 -mms-bitfields -IC:/msys64/mingw64/bin/../include/fribidi -IC:/msys64/mingw64/bin/../include/cairo -IC:/msys64/mingw64/bin/../include/lzo -IC:/msys64/mingw64/bin/../include/pixman-1 -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -IC:/msys64/mingw64/bin/../include/gdk-pixbuf-2.0 -mms-bitfields -mms-bitfields -mms-bitfields -IC:/msys64/mingw64/bin/../include/atk-1.0 -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -IC:/msys64/mingw64/bin/../include/cairomm-1.0 -IC:/msys64/mingw64/bin/../lib/cairomm-1.0/include -IC:/msys64/mingw64/bin/../include/pangomm-1.4 -IC:/msys64/mingw64/bin/../lib/pangomm-1.4/include -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -IC:/msys64/mingw64/bin/../include/atkmm-1.6 -IC:/msys64/mingw64/bin/../lib/atkmm-1.6/include -IC:/msys64/mingw64/bin/../include/gdkmm-3.0 -IC:/msys64/mingw64/bin/../lib/gdkmm-3.0/include -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -pthread -mms-bitfields -LC:/msys64/mingw64/bin/../lib -lgtkmm-3.0 -latkmm-1.6 -lgdkmm-3.0 -lgiomm-2.4 -lgtk-3 -lgdk-3 -lz -lgdi32 -limm32 -lshell32 -lole32 -Wl,-luuid -lwinmm -ldwmapi -lsetupapi -lcfgmgr32 -lpangowin32-1.0 -latk-1.0 -lcairo-gobject -lgio-2.0 -lpangomm-1.4 -lglibmm-2.4 -lcairomm-1.0 -lsigc-2.0 -lpangocairo-1.0 -lpango-1.0 -lharfbuzz -lcairo -lgdk_pixbuf-2.0 -lgobject-2.0 -lglib-2.0 -lintl

となった。

公式サイトのサンプルコード(https://www.gtk.orgより引用)

C

1#include <gtk/gtk.h> 2 3static void on_activate (GtkApplication *app) { 4 // Create a new window 5 GtkWidget *window = gtk_application_window_new (app); 6 // Create a new button 7 GtkWidget *button = gtk_button_new_with_label ("Hello, World!"); 8 // When the button is clicked, close the window passed as an argument 9 g_signal_connect_swapped (button, "clicked", G_CALLBACK (gtk_window_close), window); 10 gtk_window_set_child (GTK_WINDOW (window), button); 11 gtk_window_present (GTK_WINDOW (window)); 12} 13 14int main (int argc, char *argv[]) { 15 // Create a new application 16 GtkApplication *app = gtk_application_new ("com.example.GtkApplication", 17 G_APPLICATION_FLAGS_NONE); 18 g_signal_connect (app, "activate", G_CALLBACK (on_activate), NULL); 19 return g_application_run (G_APPLICATION (app), argc, argv); 20}

試したこと

pkg-configがインストールされてるかを確認しようとした。

console

1$ pkg-config --version 21.7.4

エラーは直らず変化が見られなかった。
(追記)
Windowsの環境変数の設定でgccのコンパイラは"C:\MinGW\bin"から"C:\msys64\mingw64\bin"に変更

console

1$ gcc -v 2Using built-in specs. 3COLLECT_GCC=C:\msys64\mingw64\bin\gcc.exe 4COLLECT_LTO_WRAPPER=C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/lto-wrapper.exe 5Target: x86_64-w64-mingw32 6Configured with: ../gcc-10.3.0/configure --prefix=/mingw64 --with-local-prefix=/mingw64/local --build=x86_64-w64-mingw32 --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --with-native-system-header-dir=/mingw64/x86_64-w64-mingw32/include --libexecdir=/mingw64/lib --enable-bootstrap --enable-checking=release --with-arch=x86-64 --with-tune=generic --enable-languages=c,lto,c++,fortran,ada,objc,obj-c++,jit --enable-shared --enable-static --enable-libatomic --enable-threads=posix --enable-graphite --enable-fully-dynamic-string --enable-libstdcxx-filesystem-ts=yes --enable-libstdcxx-time=yes --disable-libstdcxx-pch --disable-libstdcxx-debug --enable-lto --enable-libgomp --disable-multilib --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-libiconv --with-system-zlib --with-gmp=/mingw64 --with-mpfr=/mingw64 --with-mpc=/mingw64 --with-isl=/mingw64 --with-pkgversion='Rev5, Built by MSYS2 project' --with-bugurl=https://github.com/msys2/MINGW-packages/issues --with-gnu-as --with-gnu-ld --with-boot-ldflags='-pipe -Wl,--dynamicbase,--high-entropy-va,--nxcompat,--default-image-base-high -Wl,--disable-dynamicbase -static-libstdc++ -static-libgcc' 'LDFLAGS_FOR_TARGET=-pipe -Wl,--dynamicbase,--high-entropy-va,--nxcompat,--default-image-base-high' --enable-linker-plugin-flags='LDFLAGS=-static-libstdc++\ -static-libgcc\ -pipe\ -Wl,--dynamicbase,--high-entropy-va,--nxcompat,--default-image-base-high\ -Wl,--stack,12582912' 7Thread model: posix 8Supported LTO compression algorithms: zlib zstd 9gcc version 10.3.0 (Rev5, Built by MSYS2 project)

補足情報(FW/ツールのバージョンなど)

使用OS: Windows 10

MSYS2にて

console

1pacman -S mingw-w64-x86_64-gtk3 mingw-w64-x86_64-glade mingw-w64-x86_64-toolchain base-devel

のコマンドを入力しGTKのインストールを行った。

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

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

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

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

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

pepperleaf

2021/07/16 07:42

コマンド中にシングルクォート (')があるようですが、不要では?
AIUE-kun

2021/07/16 08:43 編集

シングルクォート(')を外してみたのですが以下の通りです。 $ gcc -o gtk_test gtk_test.c pkg-config --cflags --libs gtkmm-3.0 gcc.exe: error: pkg-config: No such file or directory gcc.exe: error: gtkmm-3.0: No such file or directory gcc.exe: error: unrecognized command line option '--cflags' gcc.exe: error: unrecognized command line option '--libs'
jbpb0

2021/07/16 11:20 編集

> MSYS2にて'pkg-config --cflags --libs gtkmm-3.0'を確認しようとした では「gtkmm-3.0」と書いてますが、その下の > pkg-config --cflags --libs gtk+-3.0 では「gtk+-3.0」となってます 実際に確認したのは、どちらなのでしょうか? > pacman -S mingw-w64-x86_64-gtk3 もし「gtkmm-3.0」を使いたいのなら、 pacman -S mingw-w64-x86_64-gtkmm3 とするのでは? 参考 https://packages.msys2.org/package/mingw-w64-x86_64-gtkmm3 https://blogs.osdn.jp/2018/02/03/gtkmm.html
AIUE-kun

2021/07/31 15:48

jbpb0さん MSYS2にて'pkg-config --cflags --libs gtkmm-3.0'をコマンドで確認するところまではなんとかできました。 ありがとうございます。
guest

回答2

0

何となくですが,原因の予想がついて手元の環境でgtkをインストールをして試してみました。

こちらの予想が当たっていれば,これはmsys2を始めた最初だけにはまる罠です。
おそらくもう二度と失敗することはないでしょう。

解決方法は「msysではなくMingw64のシェルを起動して実行する」です。

msys2には

  • MSYS
  • MinGW 64-bit
  • MinGW 32-bit

の三種類の環境を使えるようになっていて,64bitのライブラリをリンクしてコンパイルするためには,
MinGW 64-bitから起動してコンパイルしないといけません。

質問者の現在の状況はおそらくMSYSのシェルを立ち上げてpkg-configを実行して
MSYS本体にリンクしているpkg-configの設定ファイルを見にいって
「ファイルが無い」というエラーメッセージが出ているのではないかと思います。

私の手元の環境でもMSYSから立ち上げた方では質問者と同じ状況になっています。
ただ,MSYS本体用のgccをインストールしていないので,gccが見つからないという状況が
違っています。

投稿2021/07/16 12:27

ujimushi_sradjp

総合スコア2152

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

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

AIUE-kun

2021/07/31 15:54

回答ありがとうございます。返答遅くなりました。 おかげ様でコマンドからpkg-configは確認できるようになりました。 ただ、Windowsの環境変数のPATHを"C:\MinGW\bin"から"C:\msys64\mingw64\bin"に変更したのですが、追記部分に書いた通り「#includeエラーが検出」と出て解決まではいけてない状態です。
ujimushi_sradjp

2021/07/31 16:17

もし素のmingwではなくmsys2をインストールしていて初心者を自認しているなら 環境変数を変更せず「MSYS2 MinGW 64-bit」のショートカットから起動するシェル内の環境を使用すべきです。 このショートカットは実際には 「C:\msys64\msys2_shell.cmd -mingw64」等を実行していて,「msys2_shell.cmd」内でインクルードディレクトリ等の設定を自動で行っています。 質問などせず自分で設定を試行錯誤して解決する気概があるのなら別ですが。
ujimushi_sradjp

2021/07/31 16:46

追記読み返しました。Visual Studio Codeでコンパイルされてたんですね。 それなら私の専門外です。お役に立てずにすみません。 gcc `pkg-config --cflags gtk+-3.0` -o gtk_test gtk_test---.c `pkg-config --libs gtk+-3.0` ならうまくいくかもしれませんし,そうでないかもしれません。
guest

0

シェルに対して pkg-config --cflags --libs gtkmm-3.0 の部分を囲むべきは、シングルクォートではなく、バッククォートです。

これ `

投稿2021/07/16 09:16

itagagaki

総合スコア8402

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

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

AIUE-kun

2021/07/16 12:26

$ gcc -o gtk_test gtk_test.c `pkg-config --cflags --libs gtkmm-3.0` gcc.exe: error: pkg-config: No such file or directory gcc.exe: error: gtk+-3.0`: No such file or directory gcc.exe: error: unrecognized command line option '--cflags' gcc.exe: error: unrecognized command line option '--libs' に変更したもののうまくいきませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問