Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android NDK: how to let gcc to use additional include directories

A simple question (i am using android NDK r6 with cygwin, but this is a question regarding makefiles and gcc). Suppose that i put under jni/ directory a library under the dir mylib_v_1/. Mylib is structured as:

mylib_v_1
   mylib
      include

Under the include directory there are two files, myinc1.hpp and myinc2.hpp. In myinc1.hpp there is a line as:

#include <mylib/myinc2.hpp>

in my .cpp file, under the jni/ directory, there is the following line:

#include <mylib/myinc1.hpp>

I want to setup the Android.mk (or what other files needs to be set up) in order to let gcc to know to use, as additional include directory, jni/mylib_v_1/ in order to use #include with brackets (instead of two files, in my real case there are a lot of .hpp that includes a lot of other .hpp with brackets notation).

How can i do this?

Thx.

Ps. If, in the .cpp file i change the include in this way:

#include "mylib/myinc1.hpp"

gcc find myinc1.hpp but, while processing it, it find the second include:

#include  <mylib/myinc2.hpp>

and stop there, saying that it is not able to find the file myinc2.hpp.

like image 998
Luke Avatar asked Sep 08 '11 13:09

Luke


2 Answers

Option 1:

Add one of the following lines to your Android.mk inside a module of your choice:

   LOCAL_C_INCLUDES := /path/to/your/includes # ignore previous includes
                                              # OR
   LOCAL_C_INCLUDES += /path/to/your/includes # preserve previous includes

If necessary you could create an environment variable pointing at '/path/to/your/includes' and include it like this:

   LOCAL_C_INCLUDES := $(MYLIB_INCLUDES_PATH) # ignore previous includes
                                              # OR
   LOCAL_C_INCLUDES += $(MYLIB_INCLUDES_PATH) # preserve previous includes

Option 2:

  1. Copy the complete folder with all header-files in it (mylib) into the 'jni' folder of your project.

  2. Add the following line to your Android.mk inside a module of your choice:

    LOCAL_C_INCLUDES := $(LOCAL_PATH)/mylib
    

    or

    LOCAL_C_INCLUDES += $(LOCAL_PATH)/mylib
    

Depending on whether there are previous includes or not.

Option 3:

Install the CDT plugin for Eclipse and add the absolute path to the 'mylib' directory to the include paths of your project. Here is a great tutorial that shows all the necessary steps.

http://mhandroid.wordpress.com/2011/01/23/using-eclipse-for-android-cc-development/

like image 189
Ivo Avatar answered Oct 23 '22 07:10

Ivo


You can add C include paths in you Android.mk using:

common_CFLAGS := -Ijni/mylib/include

Any additional paths require another -I option.

like image 34
Burton Samograd Avatar answered Oct 23 '22 08:10

Burton Samograd