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

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

新規登録して質問してみよう
ただいま回答率
85.48%
CMake

CMakeはクロスプラットフォームで作動するオープンソースのビルドシステムです。コマンドライン又は組み込まれた開発環境で使うことができる元のmakefileとプロジェクトファイルを生成します。

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

2321閲覧

C++でmatplotlibを使ってxy座標を描写したグラフを作成したい

rrhh

総合スコア3

CMake

CMakeはクロスプラットフォームで作動するオープンソースのビルドシステムです。コマンドライン又は組み込まれた開発環境で使うことができる元のmakefileとプロジェクトファイルを生成します。

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2021/11/05 09:10

前提・実現したいこと

C++でmatplotlibを使って、任意の初速度・角度で放たれた質点のxy座標を描写したグラフを作成したいです。このページを参考に、このコードをコピーしてmatplotlibcppという名前のhppファイルを作成しました。matplotlibcpp.hppをインクルードして、xy座標が描写されるように記述したのですが、Buildtimeで"Undefined symbols for architecture x86_64"というエラーが16個も出てきました。

先程参考にしたページには「ヘッダライブラリなので、
インクルードし、コンパイル時にpython2.7にリンクを通すだけで使用できます。」とか、

「下記のようにPythonをリンクすればコンパイルできます。

Makefile
g++ main.cpp -lstdc++ -lpython2.7 -std=c++11

CMake
find_package(PythonLibs REQUIRED)
include_directories(${PYTHON_INCLUDE_DIRS})
target_link_libraries(hoge ${PYTHON_LIBRARIES})」
とか説明が書かれており、色々調べたのですがどのように使えばよいのかわかりません。

何が足りていないのかお教えください。よろしくお願いいたします。

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

Undefined symbols for architecture x86_64: "_PyDict_New", referenced from: bool matplotlibcpp::plot<double>(std::__1::vector<double, std::__1::allocator<double> > const&, std::__1::vector<double, std::__1::allocator<double> > const&, std::__1::map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > > const&) in main.o bool matplotlibcpp::named_plot<double>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::vector<double, std::__1::allocator<double> > const&, std::__1::vector<double, std::__1::allocator<double> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in main.o

該当のソースコード

試したこと

mainに上記のMakefileやCMakeを入力してみたのですが、g++と入力した時点で"Expected unqualified-id", "Unknown type name 'g'"と出てきてしまいます。

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

Xcode 13, macOS 11.6

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

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

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

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

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

guest

回答1

0

ベストアンサー

当方のMacでは、下記手順でコンパイル・実行できました

matplotlibcpp.h
を、ファイル名は「matplotlibcpp.h」のまま保存

matplotlib-cpp
の「Usage」の最初のコードを、ファイル名を「minimal.cpp」として、「matplotlibcpp.h」と同じディレクトリに保存

Pythonがインストールしてあるパス内で、「Python.h」という名前のファイルを探す
ここでは、「/aaa/include/bbb」にあるとする

Pythonがインストールしてあるパス内で、「libpython3.*.dylib」という名前のファイルを探す
ここでは、「libpython3.7m.dylib」が「/aaa/lib」にあるとする

ターミナルで、「minimal.cpp」があるディレクトリに「cd」してから、下記コマンドでコンパイル

sh

1g++ minimal.cpp -std=c++11 -DWITHOUT_NUMPY -I/aaa/include/bbb -L/aaa/lib -lpython3.7m -Wl,-rpath,/aaa/lib

「-lpython3.7m」は、探して見つかったファイルのファイル名「libpython3.7m.dylib」から最初の「lib」と最後の「.dylib」を取って、それを「-l」につなげたもの

コンパイル後に、ターミナルで下記コマンドで実行

sh

1./a.out

投稿2021/11/06 07:59

jbpb0

総合スコア7651

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問