
У меня возникла проблема при использовании Valgrind для исполняемого файла «arm-linux».
Я скачал Valgrind с главной страницы здесь:http://valgrind.org/downloads/. Для установки выполните следующую команду:
sudo ./configure
sudo make
sudo make install
На Ubuntu я пробую с исполняемым файлом HelloWorld, скомпилированным "HelloWorld.c" с помощью Linux GCC. Valgrind запускается без проблем.
Затем я пробую это на исполняемом файле, скомпилированном с помощью кросс-компилятора для ARM-Linux (этот исполняемый файл скомпилирован для запуска на встраиваемом устройстве), и получаю следующую ошибку:
valgrind: failed to start tool 'memcheck' for platform 'arm-linux': No such file or directory
Я порылся в Google и не смог найти много информации, я попробовал:
export VALGRIND_LIB=/usr/local/lib/Valgrind
Ошибка все еще та же. Что я делаю не так?
решение1
Valgrind пытается запустить подходящий исполняемый файл для инструмента 'memcheck', но не может его найти. Это связано с тем, чтоСкрипт «./configure» создал Makefile, пригодный для установки пакета valgrind, специфичного для архитектуры хоста (вашего ПК), но вы передаете ему исполняемый файл, предназначенный для другой архитектуры (ARM в вашем случае); это приводит к ситуации, в которой вам не хватает специфических инструментов ARM для выполнения работы. У меня была похожая проблема с инструментом 'callgrind' (также частью пакета valgrind), и, выполнив strace, я получил следующую строку:
execve("/usr/local/lib/valgrind/callgrind-arm-linux", ["valgrind", "--tool=callgrind", "Application.STM.out"], [/* 19 vars */]) = -1 ENOENT (No such file or directory)
это значит, что мне не хватает специфичного для ARM двоичного файла callgrind.
Если говорить более конкретно, то то, что вы (и я не так давно) пытаетесь сделать, не поддерживается valgrind, поэтому вам нужно использовать эмулятор, чтобы сделать то, что вам нужно.