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

VC++ (Visual C++) とは、Microsoft製のC++のための統合開発環境です。

Q&A

解決済

5回答

581閲覧

matprotlib C++ コンパイルエラーが表示される

kishidamisao

総合スコア18

VC++

VC++ (Visual C++) とは、Microsoft製のC++のための統合開発環境です。

0グッド

0クリップ

投稿2025/09/11 00:55

0

0

実現したいこと

matprotlib C++サイトからmatprotlib.hをダウンロードしてビジュアルスタジオC++で
サンプル図を作成しようとすると以下のエラーが表示される。
この対策方法は、パイソンバージョン(Python 3.13.7)のダウングレードしかないのでしょうか。
Python 3では、非推奨になったので、このような表示が出るようです。
matprotlib.hの修正方法をご存じの方がいましたら教えてください。

'PySys_SetArgv': deprecated in 3.11 Matplotlib_test C:\Users\misa_\test_mat\Matplotlib_test\matplotlibcpp.h 182
'Py_SetProgramName': deprecated in 3.11 Matplotlib_test C:\Users\misa_\test_mat\Matplotlib_test\matplotlibcpp.h 174

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

オリジナルのサイトからダウンロードしたmatplotlibcpp.h を使用してビルドするとエラー表示される

該当のソースコード

特になし

試したこと・調べたこと

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

Python 3.13.7では、非推奨になったコードを使用している。

補足

特になし

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

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

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

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

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

TakaiY

2025/09/11 01:28

pythonのバージョンを落すのが妥当だと思いますが、 3.13を使いたい理由があるのでしょうか。 ちなみに、pythonのマイナーバージョンを複数インストールして切り替えてつかうこともできます。
kishidamisao

2025/09/11 01:55

昨日作業した時点での最新バージョンだったからで特に意味はありません。
quickquip

2025/09/11 14:53

確認する気はないですがforkされたものがたくさんあって、例えば https://github.com/amadeus84/matplotlib-cpp とかはそのあたりを対応したものじゃないでしょうか?
kishidamisao

2025/09/16 06:22

コメントありがとうございます。試した結果以下のエラーが表示されました。 これは修正可能でしょうか。 外部シンボル "public: void __cdecl matplot::figure_type::show(void)" (?show@figure_type@matplot@@QEAAXXZ) は未解決です 外部シンボル "public: class std::shared_ptr<class matplot::line> __cdecl matplot::axes_type::plot(class std::vector<double,class std::allocator<double> > const &,class std::vector<double,class std::allocator<double> > const &,class std::basic_string_view<char,struct std::char_traits<char> >)" (?plot@axes_type@matplot@@QEAA?AV?$shared_ptr@Vline@matplot@@@std@@AEBV?$vector@NV?$allocator@N@std@@@4@0V?$basic_string_view@DU?$char_traits@D@std@@@4@@Z) は未解決です 外部シンボル "class std::shared_ptr<class matplot::figure_type> __cdecl matplot::gcf(void)" (?gcf@matplot@@YA?AV?$shared_ptr@Vfigure_type@matplot@@@std@@XZ) は未解決です 外部シンボル "class std::shared_ptr<class matplot::axes_type> __cdecl matplot::gca(void)" (?gca@matplot@@YA?AV?$shared_ptr@Vaxes_type@matplot@@@std@@XZ) は未解決です ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 4 件の未解決の外部参照外部シンボル "public: void __cdecl matplot::figure_type::show(void)" (?show@figure_type@matplot@@QEAAXXZ) は未解決です 外部シンボル "public: class std::shared_ptr<class matplot::line> __cdecl matplot::axes_type::plot(class std::vector<double,class std::allocator<double> > const &,class std::vector<double,class std::allocator<double> > const &,class std::basic_string_view<char,struct std::char_traits<char> >)" (?plot@axes_type@matplot@@QEAA?AV?$shared_ptr@Vline@matplot@@@std@@AEBV?$vector@NV?$allocator@N@std@@@4@0V?$basic_string_view@DU?$char_traits@D@std@@@4@@Z) は未解決です 外部シンボル "class std::shared_ptr<class matplot::figure_type> __cdecl matplot::gcf(void)" (?gcf@matplot@@YA?AV?$shared_ptr@Vfigure_type@matplot@@@std@@XZ) は未解決です 外部シンボル "class std::shared_ptr<class matplot::axes_type> __cdecl matplot::gca(void)" (?gca@matplot@@YA?AV?$shared_ptr@Vaxes_type@matplot@@@std@@XZ) は未解決です ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 4 件の未解決の外部参照
kishidamisao

2025/09/16 06:26

ソースコードは以下になります。 ソースコード事態の問題は見つかりませんと表示されています。 #include <matplot/matplot.h> #include <vector> #include <iostream> namespace plt = matplot; int main() { std::cout << "Hello World!\n"; std::vector<double> x(100), y(100); for (int i = 0; i < 100; i++) { x[i] = 1.0 * i / 100; y[i] = x[i] * x[i]; } plt::plot(x, y); plt::show(); }
hiroki-o

2025/09/16 12:37

結局、誰の回答の方法でやることにしたのでしょうか? ちなみに、提示されたソースは、私の回答の方法で正常にグラフ表示されています。 (プルリク版ヘッダーとMatplot++の両方とも、右肩上がりの曲線)
kishidamisao

2025/09/17 04:36

昔、このような回答をいただいたのを思い出したので、この方法を試してみました。 https://teratail.com/questions/mh9h0q549hd585 これで当時は動いたので同様の作業を行いました。 その結果エラーが表示されました。
guest

回答5

0

同様の問題が Issues に報告されています。(2024/11/16付け)

Error due to depreciated Py_SetProgramName(name); · Issue #366 · lava/matplotlib-cpp

今のところ作者からの返答がないので放置状態の様です。一応、Pull requests に Python 3.11 以降への対応版が上がっているのですが、こちらも master branch にマージされることなく今に至っています。

Fix matplotlibcpp.h used deprecated functions in Python 3.11 by GalaxyPatrick · Pull Request #357 · lava/matplotlib-cpp

こちらの matplotlibcpp.h を使用して、リポジトリに掲載されている minimal.cpp をコンパイルしてみたところ、問題なく実行形式が作成されました。

c++

1#include "matplotlibcpp.h" 2namespace plt = matplotlibcpp; 3int main() { 4 plt::plot({1,3,2,4}); 5 plt::show(); 6}

sh

1$ git clone https://github.com/GalaxyPatrick/matplotlib-cpp/ 2$ cp matplotlib-cpp/matplotlibcpp.h . 3$ g++ --version 4g++ (Ubuntu 14.2.0-19ubuntu2) 14.2.0 5 6$ g++ minimal.cpp -o minimal -std=c++23 -I/usr/lib/x86_64-linux-gnu/python3-numpy/numpy/_core/include -I/usr/include/python3.13 -lpython3.13 7$ ./minimal

投稿2025/09/11 16:29

melian

総合スコア21491

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

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

0

質問者さん、以前にも同じ質問をしていますね。
visual studio 2022、または、2019に、matplotlibのインストール方法について

quickquipさんのコメントと重なってしまいますが、matplotlib-cpp本家にプルリクが出ています。
https://github.com/lava/matplotlib-cpp

プルリクは2年くらい放置されているようですが、出した人のmatplotlibcpp.hに差し替えると最新版のPythonでも動くと思います。
https://github.com/GalaxyPatrick/matplotlib-cpp

回答を作るために試しましたが、Pythonのヘッダーとライブラリにパスを通すのが難しくて断念しました。
週末までに解決していなかったら、再度チャレンジしてみます。

無理してPythonと連携しなくても、C++ならMatplot++があります。
https://alandefreitas.github.io/matplotplusplus/

こちらのインストール方法は、以前に質問者さんに回答しました。
Matplot++のインストール方法を教えてください。

(追記)
プルリク出ているmatplotlibcpp.hに差し替えて、以下の環境で確認しました。

  • Windows 11
  • Visual Studio 2022
  • Python 3.13.7
  • matplotlib 3.10.6

プロジェクトの設定 ※パスのusernameは各自で変更
[C/C++]-[全般]-[追加のインクルードディレクトリ]

C:\Users\username\AppData\Local\Programs\Python\Python313\include; C:\Users\username\AppData\Local\Programs\Python\Python313\Lib\site-packages\numpy\_core\include

[リンカー]-[全般]-[追加のライブラリディレクトリ]

C:\Users\username\AppData\Local\Programs\Python\Python313\libs

Releaseモードでビルドします。
examplesの19本のうち、14本は正常動作しました。
以下の5本は、ビルドは通りましたが、実行時例外になりました。

fill_inbetween.cpp lines3d.cpp nonblock.cpp subplot.cpp surface.cpp

原因までは調査していません。参考にしてください。

投稿2025/09/11 15:35

編集2025/09/14 10:23
hiroki-o

総合スコア1642

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

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

0

自己解決

以下を参考にしてグラフが書けましたが以下のが warningが表示されます。
line 203: warning: Reading from '-' inside a multiplot not supported; use a datablock instead
この件について調べたところ原因は、gnuplot 6.0.3 からのwarningです。
回避方法はわかりませんがグラフは表示されます。

https://teratail.com/questions/mh9h0q549hd585

投稿2025/09/17 06:56

kishidamisao

総合スコア18

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

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

0

とりあえず手っ取り早く対処したいのであれば、TakaiYさんの言うとおりPythonのバージョンを下げるか、作者に対応をお願いするとかではないですか。


もし自分で直したい、と言うのであれば、軽く調べた程度ですが、情報共有しておきます。
(まぁ、自分はmatplotlibは知らないので)

だいたい、この辺りの仕様変更によるものではないですか。

  • Python インタプリタの拡張と埋め込み - 1.1.高水準の埋め込み

どうやら、初期化の処理、特にsysモジュールの情報の設定方法が変わったようです。
おおよそ、こんな感じで書き換えるのではないかと。

c

1#define PY13 2#define PY13 3#define PY_SSIZE_T_CLEAN 4#include <Python.h> 5 6int main(int argc, char *argv[]) 7{ 8 wchar_t *args[3] = { L"hoge", L"piyo", L"fuga", }; 9 10#ifdef PY13 11 { 12 PyConfig py_conf; 13 PyConfig_InitIsolatedConfig(&py_conf); 14 15 PyConfig_SetArgv(&py_conf, 3, args); 16 PyConfig_SetString(&py_conf, &py_conf.program_name, L"hoge"); 17 Py_InitializeFromConfig(&py_conf); 18 } 19#else 20 Py_SetProgramName(L"hoge"); 21 Py_Initialize(); 22 PySys_SetArgvEx(3, args, 0); 23#endif 24 PyRun_SimpleString("import sys\nprint(repr(sys.argv))\n"); 25 if (Py_FinalizeEx() < 0) { 26 exit(120); 27 } 28 return 0; 29}

投稿2025/09/11 13:15

katsuko

総合スコア3614

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

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

0

3.13を使いたい理由があるのでしょうか。

昨日作業した時点での最新バージョンだったからで特に意味はありません。

であれば、pythonの 3.11 以前のバージョンを使うのがいいと思います。

投稿2025/09/11 02:05

編集2025/09/11 02:06
TakaiY

総合スコア14641

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

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

bsdfan

2025/09/11 03:46

deprecated in 3.11 なので、3.11 もだめで、3.10 以前を使うのがいいのではないでしょうか? (3.11 で deprecated になって、3.13 で削除されたようなので、3.11 でもwarningは出るけどビルドできるかもしれません)
TakaiY

2025/09/11 04:39

> 3.11 でもwarningは出るけどビルドできるかもしれません) はい。3.11 でも、3.12 でもできると思います。 「以前」ではなく「より前」としたらよかったなと思っています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問