交叉编译静态iozone工具

因工作需要,编译mips版本的静态iozone工具。

1,源码地址:Index of /src/current (iozone.org)

当时实测过两个版本

wget https://www.iozone.org/src/current/iozone3_482.tar
wget https://www.iozone.org/src/current/iozone3_506.tar

因为有编译问题,想使用新版本跳过问题,结果发现不行。

2,解压与编译:

tar -xvf ../iozone3_506.tar

交叉编译使用src/current/makefile文件,查看all目标可以看出iozone对不同架构有不同的支持,指定工具链后,就可以选择不同的目标,如arm 就有linux-arm或者android等,如果是riscv/mips平台那就要选择linux,之前选择generic 编译出来是可以,但执行时有问题,但选择linux 后,静态链接又有问题。

修改makefile中

CC      = cc   为

CC      = mips-linux-gnu-gcc  -static ,static是因为我需要静态链接,此处需要查看具体目标,有些目标使用GCC。

vim打开修改后,如果提示只读,需要使用wq!保存。

make linux

此时会报错,我不确定其他架构编译器是否会有问题,如果没有问题,那么iozone就编译出来了。

我编译时报错如下:

mips-linux-gnu/libc/usr/lib/librt.a(aio_misc.o): In function `handle_fildes_io':

../sysdeps/pthread/aio_misc.c:(.text+0x1a0): undefined reference to `pthread_getschedparam'

...

此时会报八九项pthread相关的undefined的错误,而且错误原因是mips编译器的rt库中使用了未定义的pthread相关变量或者函数,这时我使用mips-linux-gnu-nm读取了我mips工具链的libpthread.a库,里面存在这些符号,搞的我很懵,尝试了改变-static选项的位置,但是不起作用。

最后在同事提示下修改的-lrt与-lpthread的位置,解决了这个问题,因为对编译器了解不深入,确实不知道这是这么情况,所以记录一下吧。

找到编译makefile target linux的位置,iozone3_506 的src/current/makefile 的174行,把-lrt提到 -lpthread前面,再执行make linux,就可以成功编译出mips版本的静态的iozone工具了。

iozone功能测试对内存有要求,如果内存较小,会导致oom。

./iozone -t 5 -b t5.xls  -t是多线程,-b是输出,iozone默认输出xls格式。

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值