1. 代码
~/repos/so [master] $ cat t.c
#include <stdio.h>
extern void say();
int main()
{
say();
return 0;
}
~/repos/so [master] $ cat t1.c
#include <stdio.h>
void say() {
printf("t1\n");
}
~/repos/so [master] $ cat t2.c
#include <stdio.h>
void say() {
printf("t2\n");
}
2. 生成动态库
gcc t1.c -shared -fPIC -o libt1.so
gcc t2.c -shared -fPIC -o libt2.so
3. 测试
~/repos/so [master] $ gcc t.c -L. -lt1 -lt2
~/repos/so [master] $ ./a.out
t1
~/repos/so [master] $ gcc t.c -L. -lt2 -lt1
~/repos/so [master] $ ./a.out
t2
结论
先链接谁,就是用谁!不知道 android 上加载 so 的策略是不是这样的。如果是的话,做一个
unsigned char *xxtea_decrypt(unsigned char *data, xxtea_long data_len, unsigned char *key, xxtea_long key_len, xxtea_long *ret_length)
原型的动态库,先于 libcocos2dlua.so 加载,就可以打印 key 了。
END
Android动态库的加载与Linux一致使用dlopen系列函数,通过动态库的句柄和函数名称来调用动态库的函数
需要更新测试程序,使用 dlopen
,不过从原理上看,都不行了。
网友评论