android 加载第三方库

LOCAL_PATH:=$(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := cal
LOCAL_SRC_FILES := ./libcal.so

LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../sum/jni/

include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := call

LOCAL_SRC_FILES:= \
call.cpp
(warning (LOCAL_SRC_FILES))

LOCAL_LDLIBS := -llog -lz -lm
$(warning aaa)
LOCAL_SHARED_LIBRARIES := cal #这里记得加上

APP_ABI := armeabi-v7a
APP_PLATFORM := android-14
LOCAL_MODULE_TAGS := optional

include $(BUILD_EXECUTABLE)
采用这种方法只能是在存在android代码情况下才能用,也就是System.loadLibrary(“cal”); System.loadLibrary(“call”);这个时候才能用,如果libcall.so变成了一个可执行程序”call”,那么不能这样只写,运行时会出现找不到第三方库, 原因是第三方库的路径并不在系统搜索路径下面,Android.mk中到现在我也不知道怎么指定一个搜索路径, 在LOCAL_LDLIBS后面加上-L./也不管用。

改进方法直接采用动态加载第三方库,这样写mk的时候不需要写任何和第三方有关的东西(需要头文件的话,另算),然后在dlopen的时候写一个绝对路径:

if((handle = dlopen("/data/libcal.so", RTLD_NOW)) == NULL) {
        LOGE("dlopen - %sn", dlerror());
        exit(-1);
}

这样就不会出现找不到库的问题了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值