2014-01-20 4 views
2

Я не знаю, что я сделал неправильно, но я не могу это исправить.Почему ValGrind не может найти мои символы?

Согласно file,

test: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.16, BuildID[sha1]=0x436d17ab04dc54f35f1a8e6a16d4f87aaf79a0e9, not stripped 

Это ясно говорит, что "не раздели". И все же, когда я бегу VALGRIND,

--27709-- Reading syms from /root/ValGrind/test (0x8048000) 
--27709-- object doesn't have a dynamic symbol table 

Я не могу понять, почему объект не имеет таблицу символов ... Что я делаю не так?

Редактировать: Это потому, что двоичный файл 32-разрядный, и я запускаю 64-битную ОС? Или это не имеет значения?

ответ

4

Исполняемый файл статически связан; возможно, это вызывает проблему?

Вообще-то, что это проблема, с которой вы столкнулись? Поскольку сообщение «объект не имеет таблицы динамических символов», это просто отладка вывода от Valgrind, поэтому это не имеет большого значения.

КПП. согласно http://valgrind.org/docs/manual/faq.html#faq.hiddenbug Valgrind в любом случае не работает со статически связанными приложениями.

+0

Бинарный файл _is_ статически связан. Наверное, это моя проблема? – MathematicalOrchid

+0

Ну, статическое связывание, по крайней мере, даст вам неполные результаты при запуске Valgrind, так что да, это проблема _a_. В соответствии с документом вы можете использовать опцию «--soname-synonyms = somalloc = NONE» как обходной путь (я не пытался, что на самом деле работает, хотя). – oliver

0

Вы забыли добавить флаг -g или -ggdb при компиляции/увязывании?

+0

Нет, я определенно сделал это. (И двоичный файл стал больше.) – MathematicalOrchid

0

Изменен бинарный файл от статической ссылки на динамический. Установлены 32-разрядные библиотеки. Работает сейчас.

(PS. Для того, чтобы кто-либо другой отчаянно борется с OpenSUSE в ужасном поиска пакета, правильное название пакета libstdc++6-32bit.)

Смежные вопросы