如何链接在NDK应用程序的任何库 [英] How to link any library in ndk application

查看:154
本文介绍了如何链接在NDK应用程序的任何库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

本教程

看我有一个pre-内置命名为 stackoverflow.a 静态库,它有 stackoverflow.h

现在我想用静态库的功能

ndk_demo.c //该教程有这个文件

有关,我已经添加在 ndk_demo.c

 的#includestackoverflow.h
 


修改

 `里面的Andr​​oid NDK,r7c`
         |
        应用程序
         |
        ndk_demo
         |
     -----------------
     | |
   项目Application.mk
     |
--------------------
| |
其他|
文件夹JNI
                    |
-------------------------------------------------- -----------------
  | | | | |
ndk_demo.c stackoverflow.h LIB com_marakana Android.mk
                                        | _NativeLib.h
                                        |
                             --------------------
                             | |
                          Android.mk libstackoverflow.a
 

现在的 Application.mk

  APP_PROJECT_PATH:= $(叫我-DIR)/项目
APP_MODULES:= ndk_demo stackover
 

现在 JNI / Android.mk

 包括$(呼叫全子目录,生成文件)
LOCAL_PATH:= $(叫我-DIR)
包括$(CLEAR_VARS)
LOCAL_MODULE:= ndk_demo
LOCAL_SRC_FILES:= ndk_demo.c
LOCAL_STATIC_LIBRARIES:= stackover
包括$(BUILD_SHARED_LIBRARY)
 

现在 JNI / lib目录/ Android.mk

  LOCAL_PATH:= $(叫我-DIR)
   包括$(CLEAR_VARS)
   LOCAL_MODULE:= stackover
   LOCAL_SRC_FILES:= libstackoverflow.a
   包括$(preBUILT_STATIC_LIBRARY)
   LOCAL_PATH:= $(叫我-DIR)
 

的Andr​​oid NDK,R7C 目录

现在 我运行

 让APP = ndk_demo
 

它显示我的错误,如

 的Andr​​oid NDK:构建应用程序ndk_demo
使:***没有规则,使目标`建立/核心/ ndk_demo.c',需要'走出/应用程序/ ndk_demo / armeabi / OBJ文件/ ndk_demo / ndk_demo.o。停止。
 

为什么出现这种情况我没有得到?

如果我评论

 的#include $(呼叫全子目录,生成文件)
 

这从 JNI / Android.mk 则显示以下错误

 的Andr​​oid NDK:构建应用程序ndk_demo
编译大拇指:ndk_demo< = ndk_demo.c
SharedLibrary:libndk_demo.so
./out/apps/ndk_demo/armeabi/objs/ndk_demo/ndk_demo.o:在功能`Java_com_marakana_NativeLib_hello:
/home/jeegar/android-ndk-r7c/apps/ndk_demo/project/jni/ndk_demo.c:10:未定义参考`stackoverflowInit
collect2:劳工处返回1退出状态
使:*** [OUT /应用程序/ ndk_demo / armeabi / libndk_demo.so]错误1
 

解决方案

当你做: * 的无规则,使目标`something.c',它只是意味着它不能找到该文件。

我有点困惑,为什么你组织你的项目这样的,但如果我要建立自己的项目,我会做如下:

 (无所谓哪个目录)
|
 - >(ndk_demo)
 - &GT  - →(JNI)
 - >  - >  - > Application.mk
 - >  - >  - > Android.mk
 - >  - >  - > com_marakana_NativeLib.h
 - >  - >  - > ndk_demo.c
 - &GT  - →(计算器)
 - >  - >  - > stackoverflow.h
 - >  - >  - > libstackoverflow.a
 

那我就用下面的Makefile:

Android.mk:

  LOCAL_PATH:= $(叫我-DIR)

###包括计算器为prebuilt LIB ###

包括$(CLEAR_VARS)

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

包括$(preBUILT_STATIC_LIBRARY)

###建立你的NDK的lib ###

包括$(CLEAR_VARS)

LOCAL_MODULE:= ndk_demo
LOCAL_C_INCLUDES:= $(LOCAL_PATH)\
                    $(LOCAL_PATH)/../计算器
LOCAL_SRC_FILES:= ndk_demo.c

LOCAL_LDLIBS:= -llog
LOCAL_STATIC_LIBRARIES:= stackoverflow- prebuilt

包括$(BUILD_SHARED_LIBRARY)
 

和以下内容:

Application.mk:

  APP_MODULES:= ndk_demo
APP_PLATFORM:=机器人-8
 

于是最后,我将导航到该目录(ndk_demo),然后运行NDK建造。

NDK,版本是Android的构建工具。你应该使用它。它可以在这里找到:

 (AndroidSDK)/(NDK)/ NDK建造
 

如果您使用的是Windows,你将必须输入的完整路径NDK-建设到控制台,或尝试运行前的环境变量添加到系统中。

<一个href="http://www.windows7hacker.com/index.php/2010/05/how-to-addedit-environment-variables-in-windows-7/">http://www.windows7hacker.com/index.php/2010/05/how-to-addedit-environment-variables-in-windows-7/

From this tutorial.

see i have one pre-built static library named as stackoverflow.a and it has stackoverflow.h

now i want to use the function of that static library in

ndk_demo.c // that tutorial has this file

for that inside ndk_demo.c i have added

#include 'stackoverflow.h'  


Edit

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

Now Application.mk

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

Now 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)

now 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)

Now from android-ndk-r7c directory i run

make APP=ndk_demo

it shows me error like

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.

why this happening i am not getting ?

if i comment

#include $(call all-subdir-makefiles)

this from jni/Android.mk then it shows following error

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

解决方案

when you get "make: * No rule to make target `something.c'", it just means it can't find the file.

I'm a bit confused why you've organized your project like that, but if I was going to build your project, I would do it as follows:

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

Then I would use the following 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)

And the following:

Application.mk:

APP_MODULES := ndk_demo
APP_PLATFORM := android-8

Then finally, I would navigate to the directory (ndk_demo) and run ndk-build.

ndk-build is android's build tool. You should use it. It can be found at:

(AndroidSDK)/(NDK)/ndk-build

if you are using windows, you will either have to type the full path of ndk-build into the console, or add an environment variable to your system before trying to run it.

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

这篇关于如何链接在NDK应用程序的任何库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆