1,编译阶段找不到库,需要修改MK文件。
1.libbb.so放在jni/prebuilt文件夹(自己新建),同时把Android.mk复制一份到prebuilt下。
2.libbb.so的Android.mk如下:
- <span style="color:#FF0000">LOCAL_PATH := $(call my-dir)
- include $(CLEAR_VARS)
- <strong>LOCAL_MODULE := bb</strong>
- LOCAL_SRC_FILES := libbb.so
- <strong>include $(PREBUILT_SHARED_LIBRARY)</strong></span>
3.libaa.so的android.mk文件需要引入上面的android.mk。
- <span style="color:#FF0000">LOCAL_PATH := $(call my-dir)
- include $(CLEAR_VARS)
- LOCAL_MODULE := aa
- LOCAL_SRC_FILES := aa.cpp
- LOCAL_LDLIBS := -llog
- <strong>LOCAL_SHARED_LIBRARIES := bb</strong>
- include $(BUILD_SHARED_LIBRARY)
- <strong>include $(LOCAL_PATH)/prebuilt/Android.mk</strong></span>
这样在编译阶段就可以连接到第三方库咯。
注意:prebuilt目录得放在libaaa/jni/下,即libaaa/jni/prebuilt
2.APK 运行阶段找不到库
在运行阶段找不到库就是Android的事情了。后来发现是load库的顺序(默哀一个,破顺序。。)。
- static
- {
- System.loadLibrary(bb);
- System.loadLibrary(aa);
- }
先load第三方库,再load自己的库,因为aa库要用bb库里的方法,是依赖于bb库的,所以要先load。。
这样在运行阶段也可以找到库咯。
3.elf文件运行阶段找不到库
现象
root@generic:/data/local/tmp # ./testload
./testload
CANNOT LINK EXECUTABLE: could not load library "libktest.so" needed by "./testlo
ad"; caused by library "libktest.so" not found
处理方式
1|root@generic:/data/local/tmp # LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data/local/tmp
RARY_PATH:/data/local/tmp <
root@generic:/data/local/tmp # ./testload
./testload