--------------------------------------------------禁止转载--------------------------------------------------
一般来说将一个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