Android NDK动态库的调用
2010-09-16 23:50:00 来源:WEB开发网2. 指定库路径-L/cygdrive/e/cygwin/android-ndk-r4/build/platforms/android-5/arch-arm/usr/lib 里面有libz.so,libm.so,libdl.so等库的路径
3. 拷贝交叉编译文件armelf.xsc到android-ndk-r4/build/prebuilt/windows/arm-eabi-4.4.0 /lib/gcc/arm-eabi/4.4.0下,armelf.xsc在目录./build/prebuilt/linux-x86/arm- eabi-4.4.0/arm-eabi/lib/ldscripts下
4. 拷贝libc.so到./build/prebuilt/linux-x86/arm-eabi-4.4.0/lib/gcc/arm-eabi /4.4.0目录下,libc.so位于./build/platforms/android-5/arch-arm/usr/lib库
完成上面的工作你就可以放心make了,成功后生成libtutorial.so文件
libtest.so Makefile
CC = /cygdrive/e/cygwin/android-ndk-r4/build/prebuilt/windows/arm-eabi-4.4.0/bin/arm-eabi-gcc-4.4.0
CFLAGS = -g -O2 -fPIC -I/cygdrive/e/cygwin/android-ndk-r4/build/platforms/android-5/arch-arm/usr/include
SDFLAGS = -nostdlib -Wl,-T,armelf.xsc -Wl,-shared,-Bsymbolic -Wl,-soname,$@ -lc
CRT_OBJS= -L/cygdrive/e/cygwin/android-ndk-r4/build/platforms/android-5/arch-arm/usr/lib -lz -lm -ldl
# source files:
SRCS= test01.c
all: libtest.so
libtest.so: test01.o
$(CC) $(SDFLAGS) -o $@ test01.o $(CRT_OBJS)
test01.o: test01.c
clean:
rm -f libtest.so *.o
B. 生成so文件后,在工程目录下建立目录libs/armeabi,然后把so拷贝进去,在打开工程,刷新加载,一切搞定
C. 一些小技巧:
a. 查看so是不是编译成ARM模式下的so
$ file libtest.so
libtest.so: ELF 32-bit LSB shared object, ARM, version 1 (SYSV), dynamically linked, not stripped
b. 如果别人提供了你一个so,查看提供了那些方法,更详细的用法,查看nm命令
$ nm libtutorial.so |grep T
00001344 a _GLOBAL_OFFSET_TABLE_
000002a8 T getinformation
000002b4 T getinformation2
D. 下面提供一个大工程的编译的makefile,吧opencore --omx下的testapp独立编译成so,编译通过,未加载库,给大家参考。
更多精彩
赞助商链接