Saya telah mencoba mengikuti tutorial online untuk Learn C The Hard Way .
Namun setelah mengatur valgrind (saya mengikuti tautan lain yang membantu mengatur valgrind di ubuntu 12.04), ketika saya mencoba untuk men-debug c executable, saya menemukan kesalahan berikut.
ayusman@ayusman-ubuntu:~/lcthw$ valgrind ./ex4
==1984== Memcheck, a memory error detector
==1984== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==1984== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==1984== Command: ./ex4
==1984==
valgrind: Fatal error at startup: a function redirection
valgrind: which is mandatory for this platform-tool combination
valgrind: cannot be set up. Details of the redirection are:
valgrind:
valgrind: A must-be-redirected function
valgrind: whose name matches the pattern: strlen
valgrind: in an object with soname matching: ld-linux-x86-64.so.2
valgrind: was not found whilst processing
valgrind: symbols from the object with soname: ld-linux-x86-64.so.2
valgrind:
valgrind: Possible fixes: (1, short term): install glibc's debuginfo
valgrind: package on this machine. (2, longer term): ask the packagers
valgrind: for your Linux distribution to please in future ship a non-
valgrind: stripped ld.so (or whatever the dynamic linker .so is called)
valgrind: that exports the above-named function using the standard
valgrind: calling conventions for this platform. The package you need
valgrind: to install for fix (1) is called
valgrind:
valgrind: On Debian, Ubuntu: libc6-dbg
valgrind: On SuSE, openSuSE, Fedora, RHEL: glibc-debuginfo
valgrind:
valgrind: Cannot continue -- exiting now. Sorry.
ayusman@ayusman-ubuntu:~/lcthw$
Apakah ada sesuatu yang bisa saya lakukan untuk membuat valgrind akhirnya berfungsi?
Saya memiliki ubuntu 12.04 di kotak virtual. Laptop saya adalah OS Windows 7 64 bit.
12.04
software-installation
programming
c
Ayusman
sumber
sumber
Jawaban:
Saya mendapat pesan yang sama (kecuali
ld-linux-x86-64.so.2
digantild-linux.so.2
). Saya telah menginstal Valgrind menggunakanapt-get
jadi libc6-dbg sudah termasuk sebagai ketergantungan.Saya belum sepenuhnya menyelesaikan ini, tetapi petunjuknya adalah bahwa kesalahan tersebut berkorelasi dengan penggunaan saya
-m32
saat membangun.Jadi tampaknya, dalam kasus saya, masalahnya adalah kurangnya versi 32-bit libc6-dbg (atau beberapa komponennya), ketika membangun instalasi 64-bit Ubuntu 12.04.
Solusi (untuk kasus saya)
Bagi saya, perintah berikut ini membuat semuanya bekerja ...
Ini dibahas di https://bugs.launchpad.net/ubuntu/+source/eglibc/+bug/881236
Catatan: Paket
libc6-dbg:i386
tidak muncul sebagai opsi yang tersedia di Synaptic atau melalui perintah-penyelesaian dariapt-get
- tetapi tetap ada di sana.sumber
:i386
adalah kunci di sini.libc6-dbg
sudah diisyaratkan dalamvalgrind
pesan kesalahan.Ok, saya melakukan intsall libc6-dbg seperti itu
dan valgrind tampaknya berfungsi dengan baik.
Berkat tautan forum ubuntu:
http://ubuntuforums.org/showthread.php?t=1017692
sumber
sudo apt-get install libc6-dbg:i386
bisa menjadi solusi tergantung pada biner yang akan di- valgrinded (64 bit vs 32 bit).Saya berjuang dengan ini untuk waktu yang sangat lama, mengkompilasi dalam mode -m32 bekerja, tapi itu menyebalkan, apalagi jika saya ingin menggunakan misalnya -lcrypto, saya tidak bisa mengkompilasi di -m32 karena saya tidak memiliki openssl dalam 32bit diinstal .
Jadi saya membaca banyak posting serupa, biasanya menyarankan menginstal libc6-dbg: i386 ... Saya pikir ini menyelesaikan masalah untuk -m32, tapi bukan itu yang saya cari. Jadi setelah sekian lama a datang ke ini: https://lists.ubuntu.com/archives/foundations-bugs/2013-November/173202.html
Jadi coba jalankan dpkg -l libc6 * dan jika Anda melihat libc6-amd64, ini bisa membantu Anda. Tapi baca dengan seksama esp. poin 2, karena Anda tidak akan dapat menggunakan perintah apa pun setelah Anda menghapus paket libc6-amd64, jadi siapkan liveCD dan ikuti instruksi :) Ini membantu saya menyelesaikan masalah, tetapi butuh waktu sekitar 3 jam dan beberapa momen ketakutan . Saya sarankan untuk mencadangkan data Anda sebelum Anda melakukannya, karena jika Anda gagal, mungkin tidak ada jalan kembali.
Dan berhati-hatilah pada poin 4! Anda tidak dapat cukup menulis perintah yang disarankan di sana
ln -s /lib/x86_64-linux-gnu/ld-2.17.so /lib64/ld-linux-x86-64.so.2
karena itu akan membuat tautan simbolik di/
folder live cd . Anda juga harus memiliki hak root untuk menulis ke lib64. Jadi bagaimana saya melakukannya adalah: (saya punya / folder pada disk valgrind saya yang rusak dibuka melalui terminal liveCD)1)
sudo rm ./lib64/ld-linux-x86-64.so.2 //removing old link
2)
sudo ln -s /lib/x86_64-linux-gnu/ld-2.17.so ./lib64/ld-linux-x86-64.so.2
//you refer to the file on the disk with broken linux, but if you wrote just / instead of ./ you would create the link in the liveCD / folder
Semoga saya tidak melupakan apa pun dan ini akan membantu.
PS: Saya ingin tahu apakah mungkin untuk mengubah symlink sebelum Anda menghapus paket libc6-amd64 (Anda akan mem-bypass seluruh liveCD) tetapi saya tidak yakin.
sumber