关于valgrind-3.8.1的交叉编译

GavinFj 2012-12-29 06:07:46
开发中碰到了一个棘手的问题,加入一个动态库后会引起程序被kill掉,怀疑是内存溢出导致的。网上查找了下valgrind可以检测内存是否越界,因此编译了该工具(不直接编译GCC是因为项目中用到较多的依赖库,而且库是由其它部门来实现的,如果要直接使用GCC来检测需要其他部门都来配合,目前想通过内部解决该问题)。
configure 配置:
./configure --host=mipsel-linux-uclibc CC=mipsel-linux-uclibc-gcc CPP=mipsel-linux-uclibc-cpp CXX=mipsel-linux-uclibc-g++
make后出现如下问题:
mipsel-linux-uclibc-gcc -DHAVE_CONFIG_H -I. -I.. -I.. -I../include -I../VEX/pub -DVGA_mips32=1 -DVGO_linux=1 -DVGP_mips32_linux=1 -DVGPV_mips32_linux_vanilla=1 -I../coregrind -DVG_LIBDIR="\"/usr/local/lib/valgrind"\" -DVG_PLATFORM="\"mips32-linux\"" -mips32 -g -Wno-long-long -MT libcoregrind_mips32_linux_a-m_trampoline.o -MD -MP -MF .deps/libcoregrind_mips32_linux_a-m_trampoline.Tpo -c -o libcoregrind_mips32_linux_a-m_trampoline.o `test -f 'm_trampoline.S' || echo './'`m_trampoline.S
m_trampoline.S: Assembler messages:
m_trampoline.S:1040: Error: illegal operands `li $v0,(4000+119)'
m_trampoline.S:1047: Error: illegal operands `li $v0,(4000+193)'
m_trampoline.S:1059: Error: illegal operands `li $v0,0'
m_trampoline.S:1063: Error: illegal operands `addi $v0,$v0,1'
m_trampoline.S:1064: Error: illegal operands `addi $a0,$a0,1'
m_trampoline.S:1066: Error: illegal operands `lbu $t0,($a0)'
m_trampoline.S:1067: Error: illegal operands `bne $t0,$zero,strlen_loop'
make[3]: *** [libcoregrind_mips32_linux_a-m_trampoline.o] Error 1
make[3]: Leaving directory `/home/valgrind-3.8.1/coregrind'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/home/valgrind-3.8.1/coregrind'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/valgrind-3.8.1'
make: *** [all] Error 2

是否有人碰到这样的问题,希望高手出现。。。

注:源码是刚从官网上下载的。
...全文
2039 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xingozd 2015-03-18
  • 打赏
  • 举报
回复
安装目录问题,安装文件放到linux自带的文件夹tmp下就可以了
jamesguo37 2014-07-14
  • 打赏
  • 举报
回复
我编译的时候也出现类似问题 # /mnt/valgrind/bin/valgrind -h Illegal instruction
苍穹浪 2013-07-24
  • 打赏
  • 举报
回复
顺带说一下,我这里arm的gcc版本是4.3.2能编译通过
苍穹浪 2013-07-24
  • 打赏
  • 举报
回复
现在也遇到了这个问题,去查一下li指令是伪指令,会被编译器翻译成多条指令,但是编译器不支持li指令,我用的是gcc 3.4.3不知道高版本一点的gcc能不能用 或者有没有mips的汇编能手帮忙写一个能兼容老汇编器的代替指令
GavinFj 2013-01-18
  • 打赏
  • 举报
回复
引用 5 楼 fly_qj 的回复:
抱歉,我刚才抽空给我的9100手机交叉编译了一个valgrind-3.8.1,没难度,直接编成功了,没有遇到你说的问题。不过这个是arm的,你的是mips的。 ./configure --prefix=/home/rebi/cross_tools/valgrind-3.8.1/_install --host=arm-unknown-linux-gnueabi
arm平台我已经试过是可以的,就是mips的编译不了。
引用 6 楼 subfate 的回复:
可能是valgrind不支持你的芯片架构,或者某些编译指令不对。 我以前也想交叉编译个valgrind,但它不支持ARM9(ARMv5架构),支持ARMv7架构。 仅是个人意见,不对请见谅。
猜想应该是编译指令不对 感谢2位的回答,虽然没编译出valgrind。
李迟 2013-01-05
  • 打赏
  • 举报
回复
可能是valgrind不支持你的芯片架构,或者某些编译指令不对。 我以前也想交叉编译个valgrind,但它不支持ARM9(ARMv5架构),支持ARMv7架构。 仅是个人意见,不对请见谅。
RedWolf1999 2013-01-04
  • 打赏
  • 举报
回复
抱歉,我刚才抽空给我的9100手机交叉编译了一个valgrind-3.8.1,没难度,直接编成功了,没有遇到你说的问题。不过这个是arm的,你的是mips的。 ./configure --prefix=/home/rebi/cross_tools/valgrind-3.8.1/_install --host=arm-unknown-linux-gnueabi
RedWolf1999 2013-01-04
  • 打赏
  • 举报
回复
这个东西有点不太好移。你为什么不先用gdb调调?
GavinFj 2013-01-03
  • 打赏
  • 举报
回复
提问的地方不对吗。。。
GavinFj 2013-01-02
  • 打赏
  • 举报
回复
自己up下,大家都不用valgrind这个工具吗?
GavinFj 2013-01-02
  • 打赏
  • 举报
回复
怎么没人理呢。。。好吧,我现在用GDB调试定位出问题应该是C++后链接出问题了。具体的现象是,在C++文件里定义的全局变量并赋值(比如赋值为0),当程序运行时值并不是原先定义时设置的值0,而是一个固定的值(相对的,和全局变量定义的位置有关)。 有听过说C++和C是不一样的,会先将C++放在一起(不知道是说链接时还是运行时),猜测是这一情况引起的,但是不知道怎么解决。需要使用C++是因为程序依赖一个C++编译出来的库,头文件都是C++。 不知道有哪位大神知道这种问题怎么解决。。。求救!!!help me!

4,465

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧