質問するログイン新規登録
C

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

Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

curses

cursesは、 UNIX 系列で使用される端末制御ライブラリです。CUI アプリケーションを作成するために使用されます。表示端末は多くの制御コードをサポートしており、カーソル移動や画面のスクロール、領域消去といった一般的な操作の実行が可能です。

Q&A

解決済

2回答

556閲覧

MinGW64からcursesを使用

todasan

総合スコア87

C

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

Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

curses

cursesは、 UNIX 系列で使用される端末制御ライブラリです。CUI アプリケーションを作成するために使用されます。表示端末は多くの制御コードをサポートしており、カーソル移動や画面のスクロール、領域消去といった一般的な操作の実行が可能です。

0グッド

0クリップ

投稿2025/09/29 06:26

編集2025/09/29 07:39

0

0

実現したいこと

visualstdiocodeのgccの環境で、cursesを使用したいです。
以下のソースをコンパイルしても、画像のようなエラーになります。
今度はリンクを設定していますが、コンパイルしても画像のように、リンクエラーになります。
何か解決方法があれば、お聞きしてもよろしいですか。

画像のように以下のライブラリのファイル
libpdcurses.a
ヘッダーファイル
curses.h
上記の2つの環境変数のフォルダも設定しています。

start_test.c

#include <curses.h> // PDCursesのヘッダーファイル int main() { // PDCursesの初期化 initscr(); // 画面を初期化 cbreak(); // 入力を即座に受け取るモード noecho(); // 入力文字を画面に表示しない keypad(stdscr, TRUE); // 特殊キー(矢印キーなど)を有効化 // メッセージを画面中央に表示 const char *message = "Hello, World!"; int row, col; getmaxyx(stdscr, row, col); // 画面サイズを取得 mvprintw(row / 2, (col - strlen(message)) / 2, "%s", message); // 画面を更新して表示 refresh(); // ユーザーがキーを押すまで待機 getch(); // PDCursesの終了処理 endwin(); return 0; }

イメージ説明

イメージ説明

イメージ説明

イメージ説明

発生している問題・分からないこと

詳細は質問に記載した。

該当のソースコード

特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

詳細は質問に記載した。

補足

特になし

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

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

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

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

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

int32_t

2025/09/29 06:32

Visual Studio Code はほぼ関係ないので、タイトルから外したほうがよいでしょう。画像からしか読み取れませんが、MinGW64を使っているならそちらをタイトルに入れたほうがいいです。 PDCursesはどこから入手したものでしょうか。
todasan

2025/09/29 06:52

int32_t さん MSYS2をインストーラーからインストールしました。 MSYS2 のターミナルで以下を実行: pacman -S mingw-w64-x86_64-pdcurses 上記のコマンドにより、PDCursesを入手しました。
melian

2025/09/29 07:03

curses.h が見つからない旨のエラーメッセージが表示されていますので、コンパイラ(gcc)でインクルードパスを指定するとよいかと思います。具体的には、 -I c:\msys64\mingw64\include\pdcurses を追加するか、もしくは、 -I c:\msys64\mingw64\include を追加してソースコード上では #include <pdcurses/curses.h> とします。ただ、デフォルトのインクルードパスに c:\msys64\mingw64\include が含まれているかもしれませんので、#include <pdcurses/curses.h> に書き換えるだけで十分かもしれません。
todasan

2025/09/29 07:41 編集

melian さん ありがとうございます。 以下のコマンドでそのような事は解決しました。 ------------------------------------------------------ gcc -I c:\msys64\mingw64\include -o hello start_test.c -L C:\msys64\mingw64\lib -lpdcurses ------------------------------------------------------ リンクのパスを追加しても、リンクエラーになります。 何か分かりますでしょうか。質問の最後の画像にエラー内容はあります。
guest

回答2

0

ベストアンサー

MSYS2 向けの PDCurses パッケージは以下のウェブページで配布されていますが、

 mingw-w64-x86_64-pdcurses - MSYS2 Packages - Curses library on the Win32 API (mingw-w64)

このページに記載されているパッケージファイルをダウンロードして、

 https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-pdcurses-4.5.3-1-any.pkg.tar.zst

アーカイブファイル libpdcurses.a に含まれているはずの endwin 関数について確認してみます。

shell

1$ nm libpdcurses.a | grep -E '\bendwin' 2--- 30000000000000590 T endwin_u64_4400

このアーカイブには endwin_u64_4400 関数が含まれていることが判ります。curses.h ファイルの内容を確認してみると、#define endwin endwin_u64_4400 が定義されるのは PDC_WIDEPDC_FORCE_UTF8 が定義されていて、CHTYPE_32CHTYPE_16 は定義されていない場合です。

https://github.com/Bill-Gray/PDCursesMod/blob/master/curses.h#L1371

c

1#ifdef PDC_WIDE 2 #ifdef PDC_FORCE_UTF8 3 #ifdef CHTYPE_32 4 #define endwin endwin_u32_4400 5 #elif defined CHTYPE_16 6 #define endwin endwin_u16_4400 7 #else 8 #define endwin endwin_u64_4400 9 #endif

なので、コンパイルオプションに -DPDC_WIDE -DPDC_FORCE_UTF8 を追加することで対処できますが、mingw64/include/pdcurses.h に同じ設定がされているので #include <pdcurses.h> とすればよいことになります。

pdcurses.h

c

1/* if you want to use the DLL one: #define PDC_DLL_BUILD 1 */ 2/* if you want to use ncurses compatible mouse: #define PDC_NCMOUSE 1 */ 3#define PDC_WIDE 1 4#define PDC_FORCE_UTF8 1 5#include "pdcurses/curses.h"

投稿2025/09/29 23:10

melian

総合スコア21489

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

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

todasan

2025/10/01 02:41

melianさん 細かなご指摘をありがとうございます。
guest

0

  1. MSYS2 をインストール
  2. pacman -Syu を実行
  3. pacman -S mingw-w64-x86_64-toolchain を実行
  4. pacman -S mingw-w64-x86_64-pdcurses を実行

これで、C:\msys2\mingw64\bin 内にgcc.exeなどがあるはずです。

c

1#include <pdcurses.h>

#includeは上記のようにし、C:\msys2\mingw64\bin\gcc.exe でコンパイル・リンクまでできるはずです。


以下、間違っていた提案:
または

c

1#include <pdcurses/curses.h>

またはコマンドラインで gcc -IC:\msys2\mingw64\include\pdcurses -o 略

ではないでしょうか。

投稿2025/09/29 07:03

編集2025/09/30 02:44
int32_t

総合スコア22013

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

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

todasan

2025/09/29 07:41

ありがとうございます。includeは解決しました。リンクのパスを追加しても、リンクエラーになります。 何か分かりますでしょうか。質問の最後の画像にエラー内容はあります。
int32_t

2025/09/29 07:54

最初の「#include <pdcurses.h>」は試しましたか? どうやら mingw-w64-x86_64-pdcurses は pdcurses.h を include する前提のようです。
todasan

2025/09/29 08:03

int32_t さん #include <pdcurses.h>は試しましたが、includeファイルを見つけません。 #include <pdcurses/curses.h>でないと、成功しません。 lpdcursesを見つけられない、新たなエラーは出ました。
int32_t

2025/09/29 22:28

昨晩動作確認しましたが、#include <pdcurses.h> で gcc に -I -L なしでコンパイルと実行できました。質問者さんの環境に何か問題があります。 * C:\msys2\mingw64\include\pdcurses.h は存在しますか? * gcc は C:\msys2\mingw64\bin\ にあるものを使ってますか? コマンドプロンプトで「where gcc」などで確認してください。
todasan

2025/09/30 01:54

int32_t さん C:\msys2\mingw64\binは空でしたので、別にインストールしていたC:\gcc\mingw64\binを 空のところに移動しました。環境変数も設定して、再起動しましたが、指摘された方法ではできません。 C:\msys2\mingw64\bin\はどのようにインストールしましたか。
todasan

2025/09/30 02:09

melian さん ご指摘ありがとうございます。 下記の方法ではコンパイルできました。 gcc -I c:\msys64\mingw64\include -o hello start_test.c -L C:\msys64\mingw64\lib -lpdcurses -DPDC_WIDE -DPDC_FORCE_UTF8 インクルードファイルは下記の状態です。 #include <pdcurses/curses.h> 環境変数については以下を指定しています。 C:\msys64\mingw64\include C:\msys64\mingw64\include\pdcurses ソースを下記にして、以下のようにコンパイルしました。 #include <pdcurses> gcc -I c:\msys64\mingw64\include -o hello start_test.c -L C:\msys64\mingw64\lib -lpdcurses -DPDC_WIDE -DPDC_FORCE_UTF8 以下のエラーが出ます。 pdcurses: No such file or directory #include <pdcurses> // PDCurses・1;31m^~~~~~~~~~ これはどのように対処すればよろしいでしょうか。
int32_t

2025/09/30 02:13

msys2 の mingw64 をインストールしてなかったのですね。別のところからコピーしてはいけません。 pacman -Syu pacman -S mingw-w64-x86_64-toolchain の2つのコマンドを実行してください。
little_street

2025/09/30 06:41 編集

todasan さんへ > 以下のエラーが出ます。 > pdcurses: No such file or directory > #include <pdcurses> // PDCurses・1;31m^~~~~~~~~~ > これはどのように対処すればよろしいでしょうか。 については,以下の修正で改善すると思います。 #include <pdcurses> -> #include <pdcurses.h>
todasan

2025/10/01 02:38

melianさん、int32_tさん、little_streetさん 以下の対応をしました。 ---------------------------------------------------------------------- msys2 の mingw64 をインストールしてなかったのですね。別のところからコピーしてはいけません。 pacman -Syu pacman -S mingw-w64-x86_64-toolchain ---------------------------------------------------------------------- 以下のコマンドでコンパイルができました。 gcc -o hello start_test.c -lpdcurses ありがとうございます。 melianさん 細かな指摘をしていただいて、ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問