gpt4 book ai didi

android - 如何在 ndk 应用程序中链接任何库

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:00:47 25 4
gpt4 key购买 nike

来自 this tutorial .

看到我有一个名为 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

最佳答案

当你得到“make: * No rule to make target `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)

以及以下内容:

应用程序.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/

关于android - 如何在 ndk 应用程序中链接任何库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10106965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com