关于在Android上运行纯C程序

网络上能找到在liunx下使用arm的gnu编译器进行交叉编译能生成在Android的shell中运行的C程序。但是说明了一点就是必须使用-static进行静态编译,而静态编译则就无法调用动态库了。

其实不然,因为Linux系统的程序在调用动态库的时候有个首先需要访问的动态库就是ld-linux.so这个库,由这个库去访问你自己定义的动态库,然后Android上没有这个库,所以无法调用自己生成的动态库了。很明显一点就是在执行程序的时候显示结果是not found,说明确实是去找了,只是没找到而已。

既然如此,是不是只需要将这个库拷到Android上就可以了呢,经过试验,答案是肯定的。首先使用UltraEdit等16进制工具打开编译出来的可执行程序,就可以看到它首先要去索引的文件的路径,可以看到/lib/ld-linux.so.3知道了这个路径,我们发现在系统中没有/lib这个文件夹,没关系,自己建一个,然后去装有arm gnu编译器的linux系统中,搜索arm安装目录里面的ld-linux.so出来,搜完发现ld-linux.so只是个快捷方式,真正链接的是ld-2.11.1.so,那就把它传到Android里面刚建立的/lib里面,然后重命名成ld-linux.so.3然后再去执行,就发现不再是not found了,已经提示你,加载xxx.so出错,没有该文件,那你继续去找吧,把它需要的系统库全部找出来,拷过去,命名成它需要的名字,就大公搞成了,完全可以调用自己的动态库了

现在我还有个疑问需要解答,这种arm-none-linux-gnueabi-gcc编译器和ndk里面arm-none-linux-android-gcc是否一样或者是否兼容,使用ndk编译出来的so文件是否可以被调用?

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwxjfp.html