linux net-snmp(之android移植)

--------------------------------------------------禁止转载--------------------------------------------------
一般来说将一个linux下的c程序放到arm-linux环境下运行只需要使用arm-none-linux-gnueabi-gcc工具链对程序进行编译即可;
android的交叉编译工具链是arm-linux-androideabi,使用此工具链进行编译是报出了很多错误,可能是bionic库不支持glibc库中的一些函数的问题,所以放弃此方法。

另一种方法就是使用arm-none-linux-gnueabi工具链静态编译,直接使用arm-none_linux_gnueabi编译出的程序在安卓环境是不能运行的,这是因为android使用的bionic库,linux使用的glibc。解决方法就是将程序用到的所有库都静态编译,这样程序就不用依赖动态库。库差异见此文:https://blog.csdn.net/judyge/article/details/49248755

例如直接使用交叉编译工具链编译一个程序,使用"readelf -d a“查看程序a所需的动态库,发现程序还需要libc.so.6,那么此程序不能在android下运行
在这里插入图片描述

使用工具链静态编译程序,发现程序没有需要的动态库了,这样的程序即可在android下运行
在这里插入图片描述

那么使用./configure配置net-snmp时,要跟上CC=arm-linux-gcc参数用于配置使用的工具链
make时要注意make LDFLAGS="-static"并没有将c库静态编译进去,只是将net-snmp它自己所需的一些库编译了进去,正确的命令是make LDFLAGS="-all-static"
之后执行sudo make install 安装即可

一般net-snmp移植到设备上要将一些没有的功能去掉减小程序大小,下边是我使用的配置:CC=arm-linux-gcc ./configure --prefix=/usr/local/snmp/out --build=i686-linux --host=arm-linux --enable-mini-agent --disable-ipv6 --with-endianness=little --disable-manuals --disable-ucd-snmp-compatibility --enable-as-needed --disable-embedded-perl --without-perl-modules --disable-snmptrapd-subagent --disable-applications --disable-scripts

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值