Dev2rights
Dev2rights

Reputation: 3487

Android NDK in Eclipse :: (Cannot run program "ndk-build": Unknown reason)

I am loosing my mind trying to build my NDK project from eclipse using the CDT plugin and i get the error:-

NDK (Cannot run program "ndk-build": Unknown reason)

The application runs but i loose all of the console output for the build process, this is a nightmare when trying to compile and i have to do it on the command line.

This is how i got there:-

I Downloaded and installed the CDT plugin for Eclipse.

Then:

Added my JNI folder and also your Android.mk in the JNI directory.

Then:

Go FILE / NEW / OTHER /C/C++ / ( Convert to a C/C++ Project )

On setting up my build target:

Check the project, choose MakeFile Project and Other Toolchain click NEXT

Then finally in project properties:

PROJECT / PROPERTIES / C/C++ uncheck " use default build command" replace "make" with "ndk-build" 

Then when it builds it spits the error to the console. Though it compiles and makes the build which runs on the device i cant see any of the build output.

I have "ndk-build' in my .bash_profile with the following variables:

:$ANDROID_SDK/tools:$ANDROID_SDK/platform-tools:$ANDROID_NDK

I can compile using ndk-build from command line fine. It seems that Eclipse cant see my PATH:

This is on Mac OSX, in Helios version 2.

EDIT: Ok so this compiles fine, and the output from the build is infact hidden underneath this message, this is far from ideal, as when i need to review what items have been built i cant as its covered up. How do i get rid of it?

Upvotes: 7

Views: 38110

Answers (9)

msjianghu
msjianghu

Reputation: 11

In addition to system environment.

In Eclipse, You also need to go to preferences->c/c++ Build -> environment. Add a new variable with the name "NDKROOT" and value set to the NDK installation path.

This works for me.

Upvotes: 0

ksu
ksu

Reputation: 902

make sure to use "absolutepath\ndk-build.cmd" instead "absolutepath\ndk-build" in windows. It compiles without error with .cmd added

Upvotes: 1

user1530779
user1530779

Reputation: 509

In my case, I had to give complete path to my ndk-build.cmd command in eclipse in order for it to build:

Eclipse -> Your Prj -> Right Click -> C/C++ Build

C:\Prateek\android-ndk-r9\ndk-build.cmd

Upvotes: 3

Pete
Pete

Reputation: 143

I had the same problem and although the description at http://developer.android.com/tools/sdk/ndk/index.html#Installing for installing the NDK is good, it does not cover the solution to this frequent problem.

Eclipse seems to allow you to configure stuff in multiple places, you can do global modifications via Window menu or project specific configurations via the Properties option. Simplest is to add full path for ndk-build (ndk-build.cmd for windows) in the {Properties; C/C++ Build} Build command box.

Upvotes: 4

Viren
Viren

Reputation: 2171

In my case, I had to give complete path to my ndk-build command in eclipse in order for it to build:

Eclipse -> Your Prj -> Right Click -> C/C++ Build -> "Builder" group: the value for "Build command" should be complete path something like below (instead of just "ndk-build")

/Users/vshakya/MySoftware/android-ndk-r8/ndk-build

I hope this will help others in future for I just wasted like 30 minutes to figure this out.

Upvotes: 13

pinxue
pinxue

Reputation: 1746

Sequoya is your friend. It is a part of Eclipse since Indigo release.

http://www.eclipse.org/sequoyah/

Upvotes: 3

vgonisanz
vgonisanz

Reputation: 11930

The easier solution, build with the command ndk-build from eclipse project path:

$PROJECT>ndk-build

Everytime you change your native code.

To compile on eclipse, i followed the next steps:

  • Create the eclipse project.
  • Add the native code (.cpp) at jni folder
  • Create Android.mk and Application.mk following the typically structure
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_SRC_FILES := $$Add source files$$

LOCAL_LDLIBS := -lpcap

LOCAL_MODULE := libtest

LOCAL_C_INCLUDES := $$Path of the header files used$$

include $(BUILD_SHARED_LIBRARY)

----------------

Aplication.mk depends that the type of options you want
  • When eclipse throw warnings, put your mouse on jni code part, and check the option: "convert project to native code", and will convert the project automatically.

Next time you compile, ndk-build V=1 will be called, compiling native code, and then, compile Android part.

NOTE:

You must be able to use ndk-build in all folder on your system. The command detect where has been called, and look for the jni folder, to use the Android.mk to compile all native code.

The basic structure that look for is:

  • $PROJECT>jni/
    • /Android.mk
    • /Application.mk
    • /code.cpp

But you can modify Android.mk to look for code in other paths.

I hope it help you!

Upvotes: 3

Phuong Nguyen
Phuong Nguyen

Reputation: 909

Just in case you are somehow only seeing your stdout and not stderr, try redirecting your stderr to stdout.

ndk-build 2>&1

Upvotes: 2

rockeye
rockeye

Reputation: 2773

It might seem stupid but have you check if there are several consoles ? I can imagine there is one for the message you quoted, and another for build output.

See also this : the answer has an interesting link, dealing with setup but also related to eclipse integration.

Upvotes: 4

Related Questions