建立链接到其他非标准共享库的共享库
Build shared library linking to other not standard shared libarary
我有两个共享库和它们的头。我想使用前两个库中的函数来构建第三个共享库。我觉得makefile有问题。当我尝试建立接收这个:
Android NDK:/cygdrive/d//jni/Android.mk:在导入路径中找不到标记为"shared1"的模块Android NDK:你确定你的NDK_MODULE_PATH变量定义正确吗?Android NDK:搜索了以下目录:Android NDK:/cygdrive/d//jni/Android.mk:36:***Android NDK:正在中止。停下
我的项目结构:
jni/-myfile.c-Android.mkjni/dec/-大量头文件jni/enc/-大量头文件libs/armeabi/-共享1.so-shared2.so
也是Android.mk来源:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_C_INCLUDES :=
$(LOCAL_PATH)/dec
$(LOCAL_PATH)/enc
LOCAL_SHARED_LIBRARIES := shared1 shared2
LOCAL_MODULE := mylib
LOCAL_SRC_FILES := myfile.c
LOCAL_LDLIBS += -lOpenSLES
LOCAL_LDLIBS += -llog
LOCAL_LDLIBS += -landroid
include $(BUILD_SHARED_LIBRARY)
$(call import-module, shared1)
$(call import-module, shared2)
看看这个问题:安卓JNI APK包装
您需要为libs/armeabi/
文件夹指定另一个名称,以避免与NDK构建冲突,并在include $(CLEAR_VARS)
语句之前添加以下代码:
include $(CLEAR_VARS)
LOCAL_MODULE:=shared1
LOCAL_SRC_FILES:=3rdparty_libs/shared1.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE:=shared2
LOCAL_SRC_FILES:=3rdparty_libs/shared2.so
include $(PREBUILT_SHARED_LIBRARY)
据我所知,正确的方法是使用ndk构建,而不是直接调用编译器。
在Android.mk中,您需要为要编译的每个静态库指定一个模块,然后指定共享库应该使用它。
hellojni示例项目的修改后的Android.mk文件示例:
LOCAL_PATH := $(call my-dir)
# Define vars for library that will be build statically.
include $(CLEAR_VARS)
LOCAL_MODULE := <module_name>
LOCAL_C_INCLUDES := <header_files_path>
LOCAL_SRC_FILES := <list_of_src_files>
# Optional compiler flags.
LOCAL_LDLIBS = -lz -lm
LOCAL_CFLAGS = -Wall -pedantic -std=c99 -g
include $(BUILD_STATIC_LIBRARY)
# First lib, which will be built statically.
include $(CLEAR_VARS)
LOCAL_MODULE := hello-jni
LOCAL_STATIC_LIBRARIES := <module_name>
LOCAL_C_INCLUDES := <header_files_path>
LOCAL_SRC_FILES := hello-jni.c
include $(BUILD_SHARED_LIBRARY)
如果你想在运行ndk构建时控制编译哪些模块,你可以创建一个Application.mk文件(在与Android.mk相同的目录中),并列出所有模块,如下例所示:
APP_MODULES := <module_name_1> <module_name_2> ... <module_name_n>
我认为它有助于
相关文章:
- C4204:使用的非标准扩展:非常量聚合初始值设定项
- 在双重继承的情况下如何处理非标准构造函数
- CMake 不编译具有非标准扩展名的文件
- 定义具有非标准签名的自定义映射比较器
- 我想获取点的属性,它报告错误 C3867:"point::output_x":非标准语法;使用"&"创建指向成员的指针
- 非标准语法,使用 & 创建指向成员的指针
- 在Qt中链接具有非标准名称的lib文件
- 非标准语法使用 '&' 创建指向成员 C++ 的指针
- WINAPI EnumWindowsProc:非标准语法;使用 & 创建指向成员的点
- Vulkan-hpp 是reinterpret_casting非标准布局类到另一个类.这合法吗?
- 'cv::Mat::type':非标准语法;使用 '&' 创建指向成员的指针
- registerPointPickingCallback (PCLViewer::callback_Test,(void*)&viewer);返回 C3687 非标准语法;使用"&"创建指向成员的指针
- 错误 C4839:非标准地使用类 'ATL::CW2AEX<520>' 作为可变参数函数的参数
- C++ Visual Studio 2015:非标准语法;使用 '&' 创建指向成员的指针
- 非标准语法;使用 & 创建指向成员的指针
- Visual Studio 2015"非标准语法;使用"&"为成员创建指针"
- 如何将 Boost 库与 CMake 链接(如果 boost 位于非标准位置,则在集群上)?
- Cmake在非标准路径中找到OpenSSL库
- 非标准语法;使用 '&' 创建指向成员的指针错误,将成员函数分配给向量时出错
- 建立链接到其他非标准共享库的共享库