网络上能找到在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文件是否可以被调用?

更多相关文章

  1. Android安卓系统提示应用程序未安装的解决方法
  2. 【移动开发】Android应用程序完全退出
  3. Android REST 开发网络跳棋对战程序
  4. Android 教你如何写蓝牙程序1——消息传递、启动蓝牙

随机推荐

  1. Android Developers:日历提供者
  2. Android下载网络图片到本地
  3. android如何改变默认横竖屏方向
  4. Android判断当前系统语言
  5. android SDK 更新出现错误的解决办法
  6. WebView 简单使用一
  7. layout_weight 权重
  8. Android各版本对应的SDK版本
  9. 使用Android studio导入源码工程
  10. 高通平台Android N SystemUI添加qcnvitem