【发布时间】:2015-01-11 18:47:46
【问题描述】:
这是我上一个问题的改写。
我有一个测试应用程序,我正在尝试与 ibicuuc 和 libicui18n 链接。 (这是大型项目的第一步)。
我将这些作为预建库包含在我的项目中
LOCAL_SHARED_LIBRARIES := libicuuc libicui18n
从 git 存储库按原样编译:
https://android.googlesource.com/platform/external/icu4c/
这是来自 clean 的构建日志:
$ ndk-build
[armeabi-v7a] Prebuilt : libicui18n.so <= /usr/local/opt/android/libs/libs/armeabi-v7a/
[armeabi-v7a] Install : libicui18n.so => libs/armeabi-v7a/libicui18n.so
[armeabi-v7a] Prebuilt : libicuuc.so <= /usr/local/opt/android/libs/libs/armeabi-v7a/
[armeabi-v7a] Install : libicuuc.so => libs/armeabi-v7a/libicuuc.so
[armeabi-v7a] Compile++ thumb: main <= main.cc
[armeabi-v7a] SharedLibrary : libmain.so
[armeabi-v7a] Install : libmain.so => libs/armeabi-v7a/libmain.so
但当应用程序运行时,它与 /system 中的库链接,而不是我的库
root@flo:/proc/27311 # grep icu maps
40665000-40756000 r-xp 00000000 b3:16 722 /system/lib/libicuuc.so
40756000-4075f000 r--p 000f0000 b3:16 722 /system/lib/libicuuc.so
4075f000-40760000 rw-p 000f9000 b3:16 722 /system/lib/libicuuc.so
4076a000-4089a000 r-xp 00000000 b3:16 721 /system/lib/libicui18n.so
4089b000-408a2000 r--p 00130000 b3:16 721 /system/lib/libicui18n.so
408a2000-408a3000 rw-p 00137000 b3:16 721 /system/lib/libicui18n.so
6fe85000-710ac000 r--s 00000000 b3:16 897 /system/usr/icu/icudt51l.dat
73454000-7467b000 r--s 00000000 b3:16 897 /system/usr/icu/icudt51l.dat
由于“我的”库是 HEAD,它们与库的 53 版本链接,而不是系统 51,并且应用程序无法找到符号。
如何让运行时链接器从 /data/data/.../lib 加载我的库?
(这个项目的下一阶段是构建一些不属于aosp的库,需要libicu)
如果我在 java 静态中使用 System.loadLibrary(),似乎添加了正确的库,但似乎仍然没有“替换”/system 版本
D/dalvikvm(28077): Trying to load lib /data/app-lib/com.example.test.nativelibs-2/libicuuc.so 0x41e65670
D/dalvikvm(28077): Added shared lib /data/app-lib/com.example.test.nativelibs-2/libicuuc.so 0x41e65670
D/dalvikvm(28077): No JNI_OnLoad found in /data/app-lib/com.example.test.nativelibs-2/libicuuc.so 0x41e65670, skipping init
D/dalvikvm(28077): Trying to load lib /data/app-lib/com.example.test.nativelibs-2/libicui18n.so 0x41e65670
D/dalvikvm(28077): Added shared lib /data/app-lib/com.example.test.nativelibs-2/libicui18n.so 0x41e65670
D/dalvikvm(28077): No JNI_OnLoad found in /data/app-lib/com.example.test.nativelibs-2/libicui18n.so 0x41e65670, skipping init
D/dalvikvm(28077): Trying to load lib /data/app-lib/com.example.test.nativelibs-2/libmain.so 0x41e65670
谢谢
【问题讨论】:
标签: android android-ndk android-source