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

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

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

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

2回答

1648閲覧

AndroidStudio3.0のNDKでインクルード部分でエラーがでる

Yukihiro2119

総合スコア49

C++

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2017/11/08 11:16

編集2022/01/12 10:55

###前提・実現したいこと
AndroidStudio3.0 NDKでのC++ライブラリ開発

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

AndroidStudioを3.0に更新したところ、c++(NDK)のコードの依存関係が解決できなくなってしまいヘッダがインクルードされなくなってしまいました。エディタ上での補間が効かず困っています。NDKのビルドは通るので、エディタの設定かなにかな気がしますが、さっぱりわかりません。

一応、ソースコードにMakelistを載せます。
各ヘッダは各インクルードディレクトリーズに格納されています。

stdio.libやiostreamなどの標準ライブラリも解決できていないので、cmakeの設定に問題があるんでしょうか?

ご解答どうぞよろしくお願いいたします。

###該当のソースコード

txt

1cmake_minimum_required(VERSION 3.4.1) 2 3set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall") 4 5add_subdirectory( glm ) 6 7include_directories( ./gl) 8 9include_directories( ./geometry) 10 11include_directories( ./script) 12 13include_directories( ./json) 14 15include_directories( ./mesh) 16 17include_directories( ./manager) 18 19include_directories( ./tracking) 20 21include_directories( ./glm) 22 23add_library(native-lib SHARED 24 native-lib.cpp 25 gl/glutils.cpp 26 gl/Engine.cpp 27 gl/Material.cpp 28 gl/Texture.cpp 29 gl/Transform.cpp 30 gl/Camera.cpp 31 gl/Object.cpp 32 mesh/ObjMesh.cpp 33 mesh/Mesh.cpp 34 mesh/Obj.cpp 35 mesh/Quad.cpp 36 mesh/Lines.cpp 37 mesh/Ribbon.cpp 38 manager/InputManager.cpp 39 manager/MaterialManager.cpp 40 manager/TextureManager.cpp 41 manager/ConstantValue.cpp 42 geometry/Geometry.cpp 43 geometry/GeometryFactory.cpp 44 script/AnswerManager.cpp 45 script/TrackingManager.cpp 46 script/Script.cpp 47 script/BallScript.cpp 48 script/FieldScript.cpp 49 script/TracerScript.cpp 50 script/WallScript.cpp 51 script/GridScript.cpp 52 script/NetScript.cpp 53 script/AnswerLineScript.cpp 54 script/AnswerBallScript.cpp 55 script/AnswerTracerScript.cpp 56 script/RibbonScript.cpp 57 tracking/TrackingFrame.cpp 58 tracking/Shot.cpp 59 tracking/Bounce.cpp 60 tracking/Point.cpp 61 tracking/AnswerShot.cpp 62 tracking/Rally.cpp 63 tracking/utils.cpp 64 json/json11.cpp) 65 66target_link_libraries(native-lib 67 android 68 log 69 EGL 70 GLESv3)

###試したこと
課題に対してアプローチしたことを記載してください

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

guest

回答2

0

直接的な原因とは思いませんが、cmakeの書き方として指摘します。

cmake

1include_directories( ./gl)

は、

cmake

1include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/gl)

と書いた方がいいです。

AndroidStudioがcmakeの中身まで吟味しているかどうかはわかりませんが、インクルードパスの問題のようですので、一応指摘しておきます。


質問文に「エディタ上での補間が効かず困っています。NDKのビルドは通るので」と書かれていたのですが、結局ビルドも失敗していたのでしょうか?
ちょっと状況が把握しづらいです。

ディレクトリ構成ですが、AndroidStudioでC++サポートのプロジェクトを新規作成した構成と違うようですが、手を加えているか、それとも別の方法で作成していますか?
新規作成した場合、以下のような構成になります。(関係のあるファイルのみ記述)

app/build.gradle app/CMakeLists..txt app/src/main/cpp/native-lib.cpp

「CMakeLists.txt」はappディレクトリの下にあります。
そして、「app/build.gradle」にCMakeLists.txtのパスが書かれていますので、もしCMakeLists.txtの場所を変えたのであればそちらも修正が必要だと思います。

gradle

1 externalNativeBuild { 2 cmake { 3 path "CMakeLists.txt" 4 } 5 }

「ビルドが通った」と書かれているので問題はないと思いますが、ちょっと気になったので指摘しておきます。

投稿2017/11/08 15:45

編集2017/11/09 15:53
katsuko

総合スコア3462

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

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

Yukihiro2119

2017/11/09 02:46 編集

ありがとうございます! どうやらインクルードパスの問題みたいですね。一度、インクルードの部分を消したら標準関数はきちんと読み込まれました。 マクロで指定もしてみましたが、うまく行きませんでした。ディレクトリ構成が悪いのかもしれません。 cpp/ ├── CMakeLists.txt ├── gl/ ├── geometry/ ├── json/ ├── manager/ ├── script/ ├── tracking/ └── mesh/ ※各ディレクトリにインクルードしたいファイルがあります。 もしかしたらgcc?g++?のコンパイラの設定に問題があるのかもしれません。 何か思い当たる節があればお教えいただけると幸いです。m(*_ _)m
Yukihiro2119

2017/11/13 03:19

ありがとうございます! 一度クリーンしてみたところビルドが正常にいかなかったので、おそらく以前書きだしたライブラリファイルが残っていたのかと思います。 ネイティブのビルドパスに関してですが(CMakeの実行パス)、 path "src/main/cpp/CMakeLists.txt" に変更済みでした。 http://blog.techlab-xe.net/archives/4912 以前こちらの記事を参考にしていたので、変更されていたのかと思います。 度々のアドバイス、本当に有難うございます。
guest

0

結果的に解決には至りませんでしたが、一先ずはinclude_directories( )をすべて取り除くことでビルドが通りました。
依存に関しては、全て相対パスで直接参照することで解決いたしました。

投稿2017/11/09 10:52

Yukihiro2119

総合スコア49

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問