Android ndk Android NDK-如何链接C++;库与另一个C++;图书馆 我有一个C++的LIB,名为 MyLIB ,用CygWin的Android NDK R6B的NDK构建编译。生成的库文件名为libmylib.so
我有一个名为helloworld的简单应用程序,其中包含mylib的.hpp文件,并且必须与libmylib.so链接 我能够编译helloworld,告诉链接器查找libmylib.so。“奇怪”的事实是:Android ndk Android NDK-如何链接C++;库与另一个C++;图书馆 我有一个C++的LIB,名为 MyLIB ,用CygWin的Android NDK R6B的NDK构建编译。生成的库文件名为libmylib.so,android-ndk,static-linking,Android Ndk,Static Linking,我有一个名为helloworld的简单应用程序,其中包含mylib的.hpp文件,并且必须与libmylib.so链接 我能够编译helloworld,告诉链接器查找libmylib.so。“奇怪”的事实是: libmylib.so未与libhelloworld.so合并,因此我必须手动将libmylib.so复制到目录helloworld/libs/armeabi中 在java代码中,我必须使用System.loadLibrary显式加载mylib,并且在加载helloworld库之前必须加载
System.loadLibrary(“mylib”);
System.loadLibrary(“ndkfoo”);
),否则应用程序将崩溃LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := mylib
LOCAL_SRC_FILES := mylib.cpp
include $(BUILD_SHARED_LIBRARY)
#include $(BUILD_STATIC_LIBRARY)
如果我使用BUILD_SHARED_库,我会像往常一样得到libmylib.so。如果我改用BUILD\u STATIC\u库,ndk BUILD会生成no.so或.a。我真的想看看一个简单的教程,它解释了如何使用JC++编写的一个JNI应用程序(使用java + C++代码),并将它放在另一个目录中(而不是应用程序的JNI目录)。
Pss。
当我使用BUILD_STATIC_LIBRARY mylib编译时,我获得以下信息(基本上,创建的唯一文件位于dir/mylib/libs/armeabi/下,称为gdb.setup和gdbserver):
将mylib构建为一个静态库,而不是一个共享对象(一个.so文件)。然后,在定义helloworld的Android.mk中,将静态库列为依赖项:
LOCAL_STATIC_LIBRARIES := libmylib
将mylib构建为一个静态库,而不是一个共享对象(一个.so文件)。然后,在定义helloworld的Android.mk中,将静态库列为依赖项:
LOCAL_STATIC_LIBRARIES := libmylib
注意,在您为Android.mk文件列出的内容的末尾:
#include $(BUILD_STATIC_LIBRARY)
而不是:
include $(BUILD_STATIC_LIBRARY)
后者可能是您所需要的。请注意,hash标记在“fixed”版本中被排除。我发现了这个异常,并在谷歌上搜索了一个示例android.mk文件。我点击的第一个例子是Hello World示例,与您可能正在尝试的类似。希望有帮助
**编辑:
即使我的回答解决了你的一些问题,还是要听从努斯库勒的建议。他的回答描述了make文件如何“看到”mylib.a文件的名称。相信他,如果你用libmylib而不是mylib.a它会起作用的。我已经在为GCC编译器(如MinGW32)生成文件中完成了这项工作。
**注意到,在您为Android.mk文件列出的内容的末尾,您有:
#include $(BUILD_STATIC_LIBRARY)
而不是:
include $(BUILD_STATIC_LIBRARY)
后者可能是您所需要的。请注意,hash标记在“fixed”版本中被排除。我发现了这个异常,并在谷歌上搜索了一个示例android.mk文件。我点击的第一个例子是Hello World示例,与您可能正在尝试的类似。希望有帮助
**编辑:
即使我的回答解决了你的一些问题,还是要听从努斯库勒的建议。他的回答描述了make文件如何“看到”mylib.a文件的名称。相信他,如果你用libmylib而不是mylib.a它会起作用的。我已经在为GCC编译器(如MinGW32)生成文件中完成了这项工作。
**我更新了我的帖子,展示了mylib的Android.mk。问题是,如果我在mylib的Android.mk中使用#include$(BUILD_STATIC_LIBRARY),则什么都不做(不生成.so或.a)。此外,我认为应该是LOCAL_STATIC_LIBRARIES=mylib,而不是libmylib;您将需要本地静态库中的libmylib。乍一看,你的Android.mk看起来也不错。你试过运行ndk build V=1来查看详细的输出吗?或者试过运行-B来强制重建吗?我已经更新了我的帖子来显示mylib的Android.mk。问题是,如果我在mylib的Android.mk中使用#include$(BUILD_STATIC_LIBRARY),则什么都不做(不生成.so或.a)。此外,我认为应该是LOCAL_STATIC_LIBRARIES=mylib,而不是libmylib;您将需要本地静态库中的libmylib。乍一看,你的Android.mk看起来也不错。您是否尝试过运行ndk build V=1以查看任何详细输出,或运行-B以强制重建?