如何链接在NDK应用程序的任何库 [英] How to link any library in ndk application
问题描述
从本教程。
看我有一个pre-内置命名为 stackoverflow.a
静态库,它有 stackoverflow.h
现在我想用静态库的功能
ndk_demo.c
//该教程有这个文件
有关,我已经添加在 ndk_demo.c
的#includestackoverflow.h
修改
`里面的Android 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)
从的Android NDK,R7C
目录
现在 我运行
让APP = ndk_demo
它显示我的错误,如
的Android NDK:构建应用程序ndk_demo
使:***没有规则,使目标`建立/核心/ ndk_demo.c',需要'走出/应用程序/ ndk_demo / armeabi / OBJ文件/ ndk_demo / ndk_demo.o。停止。
为什么出现这种情况我没有得到?
如果我评论
的#include $(呼叫全子目录,生成文件)
这从 JNI / Android.mk
则显示以下错误
的Android 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屋!