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

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

新規登録して質問してみよう
ただいま回答率
85.47%
C++

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

Q&A

解決済

2回答

8486閲覧

VScodeで外部ライブラリを使いたいがインクルードパスが正常に設定できない

debon

総合スコア2

C++

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

0グッド

2クリップ

投稿2020/08/05 09:16

目標

VScodeで外部ライブラリのEigenを使えるようにしたいです。

試した事・症状

①Eigenのzipを公式サイトからダウンロードし解凍。
②(プロジェクト名)/.vscode/c_cpp_properties.jsonに下記(A)のように解凍場所のパスを追加。
③下記(B)のようにインクルードしビルドしたが、下記(c)のようにファイルが見つからない旨のエラー発生、ビルドできません。
しかし波線による警告は出ていないし「Go to definition」でEigen/Coreの定義にも飛べます。
④VScodeを再起動すると下記(A)の追記部分が消えてしまいます。

(A) c_cpp_properties.json

c++

1{ 2 "configurations": [ 3 { 4 "name": "!!! WARNING !!! AUTO-GENERATED FILE, PLEASE DO NOT MODIFY IT AND USE https://docs.platformio.org/page/projectconf/section_env_build.html#build-flags" 5 }, 6 { 7 "name": "Win32", 8 "includePath": [ 9         /*中略*/ 10 "C:/Users/mech3/.platformio/packages/tool-unity", 11 "", 12 "C:/Users/mech3/eigen337"//(追記部分) 13 ], 14 "browse": { 15 "limitSymbolsToIncludedHeaders": true, 16 "path": [ 17 /*中略*/ 18 "C:/Users/mech3/.platformio/packages/tool-unity", 19 "" 20 ] 21 }, 22 "defines": [ 23 /*中略*/ 24 ], 25 "intelliSenseMode": "clang-x64", 26 "cppStandard": "c++14", 27 "compilerPath": "C:/Users/mech3/.platformio/packages/toolchain-gccarmnoneeabi/bin/arm-none-eabi-gcc.exe", 28 /*中略*/ 29 } 30 ], 31 "version": 4 32}

(B) ソースコード冒頭に書いた宣言

c++

1#include <Eigen/Core> //(A)で追記していた時は波線による警告は出なかった 2using Eigen::Matrix3d;

(c) エラーメッセージ

src\main.cpp:5:22: fatal error: Eigen/Core: No such file or directory compilation terminated. *** [.pio\build\teensy40\src\main.cpp.o] Error 1

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

window10
Visual Studio Code Version 1.47.3
ちなみにマイコンボードTennsy4.0を扱うためにPlatformIOを入れています。

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

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

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

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

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

cateye

2020/08/05 10:06

#include <Eigen/Core>→#include "Eigen/Core"・・・で、どうでしょう?
debon

2020/08/05 10:35

回答ありがとうございます。 残念ながら<> を ""に変えても同様にビルドできませんでした…。
Yasumichi

2020/08/05 13:38

「Eigenのzipを公式サイトからダウンロードし解凍。」しただけだと使えない気がします。 cmake が使える環境で cmake を使ってビルド・インストールした後でないと厳しいと思います。
debon

2020/08/06 01:43

ありがとうございます。 調べたところEigenは公式や複数ブログでヘッダファイルをインクルードするだけで良い、とあったので展開ファイルをそのまま置いていました。
guest

回答2

0

ベストアンサー

そのc_cpp_properties.jsonは、先頭部分に書いてあるように、自動生成されるので変更してはだめです。

"!!! WARNING !!! AUTO-GENERATED FILE, PLEASE DO NOT MODIFY IT AND USE https://docs.platformio.org/page/projectconf/section_env_build.html#build-flags"

質問文には全く出てきませんが、おそらく「PlatformIO」の拡張機能を組み込んでいますよね。その場合、インクルードパスだの何だのの設定はPlatformIO.iniに書き、PlatformIO側でc_cpp_properties.jsonを自動生成する仕組みになっています。

ですから、上の引用文の後半で提示されているURLの説明を見て、そこに書かれているやりかたで追加する内容をPlatformIO.iniに書いてください。

投稿2020/08/05 13:45

編集2020/08/06 02:58
Daregada

総合スコア11990

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

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

debon

2020/08/06 02:28 編集

回答ありがとうございます。 質問文一番下に書いていましたが指摘の通り、PlatformIOを入れています。 警告文がちゃんと目に入っておらず、変更内容をPlatform.iniの方に書くというのはとても参考になりました。 ただ、まだEigen使用までには至っていません。 PlatformIO公式や"https://qiita.com/watarukato/items/455c74c625e178de385d"を読みつつ試しているのですが、"expected unqualified-id before numeric constant"(同じ名前で変数や定数を定義している?)というエラーが出るようになりました。Teensy4.0(Arduino)とEigen、他のライブラリとの間に問題ないか調べようと思います。 とはいえ、少なくともインクルードパスの問題は解決したと思います。ありがとうございました。
guest

0

その後下記ベストアンサーを参考に、一定の解決ができたので報告します。
ファイルPlatformIO.iniにて

lib_deps = Eigen

と入力しビルドするとPlatformIOのライブラリマネージャ(?)が勝手にEigenを探してきてプロジェクト内の…(プロジェクト名).pio\libdeps\teensy40にEigenを保存してくれました。
あとはexampleを参考に#include <Eigen.h>とするとEigenのMatrixXdVectorXdが使えるようになりました。

ただこのEigenはVer3.13.1と古いみたいです。当初目的としていた公式サイトから持ってきた最新版のzip(現時点で3.3.7)を展開・保存する方法では結局やり方が見つけられず、バージョンが古いという意味で妥協になりましたが、とりあえず使えそうです。

回答して頂いた方々ありがとうございました。

投稿2020/08/06 12:14

編集2020/08/06 12:16
debon

総合スコア2

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問