主题 : 直接用gcc编译生成*.so, 和用NDK生成的*.so有什么不同? 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 508
精华: 0
发帖: 45
金钱: 225 两
威望: 45 点
贡献值: 0 点
综合积分: 90 分
注册时间: 2008-04-14
最后登录: 2017-09-13
楼主  发表于: 2012-03-30 14:52

 直接用gcc编译生成*.so, 和用NDK生成的*.so有什么不同?

可否直接用android调用gcc编译生成*.so?

*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
贡献值: 71 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
1楼  发表于: 2012-03-30 15:10
绝大多数情况下,Android不能直接调用GNU ARM Linux工具链生成的*.so, 因为它们依赖于工具链里的glibc等库文件,而这些库文件在Android里是不包含的。Android使用自己的C库实现(bionic)。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 508
精华: 0
发帖: 45
金钱: 225 两
威望: 45 点
贡献值: 0 点
综合积分: 90 分
注册时间: 2008-04-14
最后登录: 2017-09-13
2楼  发表于: 2012-03-30 15:12
那我用-static 静态方式编译, 形成*.so, 可以不
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
贡献值: 71 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
3楼  发表于: 2012-03-30 15:54

 回 2楼(pcl001) 的帖子

不可以,因为这样生成的.so文件在运行时需要glibc的动态链接器才能正确加载。不过你可以用这种方式静态编译可执行文件放到Android上运行。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 圣骑士
UID: 44407
精华: 0
发帖: 386
金钱: 1945 两
威望: 389 点
贡献值: 0 点
综合积分: 772 分
注册时间: 2011-04-25
最后登录: 2014-08-25
4楼  发表于: 2012-04-03 11:29

 Re:回 2楼(pcl001) 的帖子

引用第3楼kasim于2012-03-30 15:54发表的 回 2楼(pcl001) 的帖子 :
不可以,因为这样生成的.so文件在运行时需要glibc的动态链接器才能正确加载。不过你可以用这种方式静态编译可执行文件放到Android上运行。

原來如何,謝謝解釋,不然我都不知道為何arm-linux靜態編譯的iptables、dnsmasq、hostapd...不能在android上執行