7

このチュートリアルから。

として名前が付けられたビルド済みの静的ライブラリが1つstackoverflow.a あり、stackoverflow.h

今、私はその静的ライブラリの関数をで使用したい

ndk_demo.c //そのチュートリアルにはこのファイルがあります

そのためにndk_demo.c私は追加しました

#include 'stackoverflow.h'  

編集

inside `android-ndk-r7c`
         |
        apps
         |
        ndk_demo
         |
     -----------------
     |               |
   project          Application.mk
     |
--------------------
|                   |
all other           |
folder             jni
                    |  
-------------------------------------------------------------------
  |               |                     |          |              |
ndk_demo.c      stackoverflow.h        lib    com_marakana       Android.mk
                                        |      _NativeLib.h
                                        |
                             --------------------
                             |                   |
                          Android.mk          libstackoverflow.a

Application.mk

APP_PROJECT_PATH := $(call my-dir)/project
APP_MODULES      := ndk_demo stackover

jni/Android.mk

include $(call all-subdir-makefiles)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := ndk_demo
LOCAL_SRC_FILES := ndk_demo.c
LOCAL_STATIC_LIBRARIES := stackover
include $(BUILD_SHARED_LIBRARY)

jni/lib / Android.mk

   LOCAL_PATH := $(call my-dir)
   include $(CLEAR_VARS)
   LOCAL_MODULE := stackover
   LOCAL_SRC_FILES := libstackoverflow.a
   include $(PREBUILT_STATIC_LIBRARY)
   LOCAL_PATH := $(call my-dir)

android-ndk-r7cディレクトリから私は実行します

make APP=ndk_demo

それは私に次のようなエラーを示しています

Android NDK: Building for application 'ndk_demo'    
make: *** No rule to make target `build/core/ndk_demo.c', needed by `out/apps/ndk_demo/armeabi/objs/ndk_demo/ndk_demo.o'.  Stop.

なぜこれが起こっているのですか?

コメントしたら

#include $(call all-subdir-makefiles)

これ以降jni/Android.mk、次のエラーが表示されます

Android NDK: Building for application 'ndk_demo'    
Compile thumb  : ndk_demo <= ndk_demo.c
SharedLibrary  : libndk_demo.so
./out/apps/ndk_demo/armeabi/objs/ndk_demo/ndk_demo.o: In function `Java_com_marakana_NativeLib_hello':
/home/jeegar/android-ndk-r7c/apps/ndk_demo/project/jni/ndk_demo.c:10: undefined reference to `stackoverflowInit'
collect2: ld returned 1 exit status
make: *** [out/apps/ndk_demo/armeabi/libndk_demo.so] Error 1
4

1 に答える 1

6

「make:*ターゲットを `something.c'にするルールはありません」と表示された場合、それは単にファイルが見つからないことを意味します。

なぜあなたがそのようにあなたのプロジェクトを組織したのか私は少し混乱しています、しかし私があなたのプロジェクトを構築するつもりなら、私はそれを次のようにします:

(doesn't matter which directory)
|
-->(ndk_demo)
-->-->(jni)
-->-->-->Application.mk
-->-->-->Android.mk
-->-->-->com_marakana_NativeLib.h
-->-->-->ndk_demo.c
-->-->(stackoverflow)
-->-->-->stackoverflow.h
-->-->-->libstackoverflow.a

次に、次のmakefileを使用します。

Android.mk:

LOCAL_PATH := $(call my-dir)

### include stackoverflow as a prebuilt lib ###

include $(CLEAR_VARS)

LOCAL_MODULE            := stackoverflow-prebuilt
LOCAL_SRC_FILES         := ../stackoverflow/libstackoverflow.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../stackoverflow

include $(PREBUILT_STATIC_LIBRARY)

### build your ndk lib ###

include $(CLEAR_VARS)

LOCAL_MODULE := ndk_demo
LOCAL_C_INCLUDES := $(LOCAL_PATH) \
                    $(LOCAL_PATH)/../stackoverflow
LOCAL_SRC_FILES := ndk_demo.c

LOCAL_LDLIBS := -llog
LOCAL_STATIC_LIBRARIES := stackoverflow-prebuilt

include $(BUILD_SHARED_LIBRARY)

そして、次のとおりです。

Application.mk:

APP_MODULES := ndk_demo
APP_PLATFORM := android-8

最後に、ディレクトリ(ndk_demo)に移動して、ndk-buildを実行します。

ndk-buildはAndroidのビルドツールです。あなたはそれを使うべきです。それはで見つけることができます:

(AndroidSDK)/(NDK)/ndk-build

Windowsを使用している場合は、ndk-buildのフルパスをコンソールに入力するか、実行する前にシステムに環境変数を追加する必要があります。

http://www.windows7hacker.com/index.php/2010/05/how-to-addedit-environment-variables-in-windows-7/

于 2012-04-13T02:21:02.640 に答える