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

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

问题描述

来自本教程.

看到我有一个名为 stackoverflow.a 的预构建静态库,它有 stackoverflow.h

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

现在我想在

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

ndk_demo.c // that tutorial has this file

对于 ndk_demo.c 里面我已经添加了

for that inside ndk_demo.c i have added

#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

它向我显示错误,例如

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 ?

如果我评论

#include $(call all-subdir-makefiles)

这个来自 jni/Android.mk 然后它显示以下错误

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

推荐答案

当你得到make: * No rule to make target `something.c'"时,表示它不能找到文件.

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

然后我会使用下面的makefile:

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)

还有以下内容:

Application.mk:

APP_MODULES := ndk_demo
APP_PLATFORM := android-8

最后,我将导航到目录 (ndk_demo) 并运行 ndk-build.

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

ndk-build 是 android 的构建工具.你应该使用它.可以在以下位置找到:

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

(AndroidSDK)/(NDK)/ndk-build

如果您使用的是 Windows,则必须在控制台中输入 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天全站免登陆