博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux net-snmp(之android移植)
阅读量:2384 次
发布时间:2019-05-10

本文共 1193 字,大约阅读时间需要 3 分钟。

--------------------------------------------------禁止转载--------------------------------------------------

一般来说将一个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

你可能感兴趣的文章
WinForm下禁止TextBox右键菜单
查看>>
C#_winform_DataGridView_的18种常见属性
查看>>
C# 扩展系统类string的方法
查看>>
webBrowser强制在本窗口打开,禁止在新窗口打开
查看>>
C#获取CPU序列号代码、硬盘ID、网卡硬件地址等类文件
查看>>
Html常用符号
查看>>
WinForm控制Webbrowser自动登录
查看>>
access表(.mdb文件) 导入 power designer
查看>>
PowerDesigner如何设计表之间的关联
查看>>
SQLite通用数据库类
查看>>
CMD下修改IP地址!
查看>>
安卓手机可以连上wifi但无法上网的解决办法
查看>>
C++程序员常用工具集
查看>>
在CSDN博客中添加量子恒道统计功能的做法
查看>>
C++调用IDL程序的做法(一)
查看>>
外部修改应用程序图标的做法
查看>>
database disk image is malformed解决方法
查看>>
有关error PRJ0003错误的思考
查看>>
实现自定义对话框程序快捷键的两种方法
查看>>
如何对抗微软霸权,google给我们上了一课
查看>>