Valgrind hata ayıklama hatası yapıyor


18

Learn C The Hard Way için çevrimiçi öğreticiyi takip etmeye çalışıyorum .

Ancak valgrind kurduktan sonra (ubuntu 12.04 üzerinde valgrind kurulumuna yardımcı olan diğer bağlantıları izledim), c yürütülebilir hata ayıklamaya çalıştığınızda, aşağıdaki hataları buluyorum.

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$ 

Sonunda valgrind'in çalışması için yapabileceğim bir şey var mı?

Sanal kutuda ubuntu 12.04 var. Dizüstü bilgisayarım Windows 7 64 bit işletim sistemidir.


valgrind benim için kutunun dışında iyi çalıştı, ama zaten hangi kütüphaneleri kurduğumu söyleyemem. valgrind repo'dan edinilebilir. derlemenize gerek yok C zor yoldan öğrenmek gibi.
repo'dan yükleme

Yanıtlar:


42

Aslında aynı mesajı aldım (bunun ld-linux-x86-64.so.2yerine ld-linux.so.2). Valgrind'i kullanarak apt-getlibc6-dbg'yi zaten bağımlılık olarak dahil etmiştim.

Bunu henüz tam olarak çözemedim, ancak bir ipucu, hatanın benim kullanımımla ilişkili olması. -m32 inşa ederken olduğudur.

Benim durumumda, sorun Ubuntu 12.04'ün 64 bitlik bir kurulumunu oluştururken libc6-dbg'nin (veya bileşenlerinin bazılarının) 32 bit sürümünün olmamasıdır.


Çözüm (benim durumum için)

Benim için, aşağıdaki komut işleri işler hale getirdi ...

sudo apt-get install libc6-dbg:i386

Bu, https://bugs.launchpad.net/ubuntu/+source/eglibc/+bug/881236 adresinde tartışılmaktadır.

Not: Paket libc6-dbg:i386Synaptic'te veya komutunun tamamlanmasıyla kullanılabilir bir seçenek olarak gösterilmez apt-get- ancak yine de oradaydı.


İlk önce yardıma ihtiyacınız olacak iyi bir değişiklik var: stackoverflow.com/a/7412698/86967
nobar

bu doğru olarak işaretlenmelidir; buradaki :i386anahtar.
Thomas Shields

Hile yapan 32 bit oldu!
Cardin

1
Bu benim için çözdü .. Bu hatayı bir serseri makinede görüyordum. Diğer yorumcuların söylediği gibi, bu doğru olarak işaretlenmelidir. (libgc-dbg zaten bir valgrind bağımlılığı olarak kuruldu, hile yapan i386 idi)
Ken

Bu cevap 32 bit ikili dosyaları ile doğru bir şekilde ilgilenmiştir. hata mesajında libc6-dbgzaten ima edildi valgrind.
leesei

11

Tamam, libc6-dbg'yi bu şekilde yaptım

sudo apt-get install libc6-dbg

ve valgrind iyi çalışıyor gibi görünüyor.

Ubuntu forum bağlantısı sayesinde:

http://ubuntuforums.org/showthread.php?t=1017692


@ Goaler444 Az önce yaptım. Hatırlattığınız için teşekkürler.
Ayusman

diğer cevap noktaları olarak, sudo apt-get install libc6-dbg:i386yapılması doğrulanacak ikili dosyaya bağlı olarak bir çözüm olabilir (64 bit - 32 bit).
logoff

0

Çok uzun bir süre bununla mücadele ettim, -m32 modunda derlendi, ama eşekte bir acıydı, ayrıca örneğin -lcrypto kullanmak istersem, 32bit'te açılmış olmadığım için -m32'de derleyemedim .

Bu yüzden, genellikle libc6-dbg: i386 yüklemeyi öneren birçok benzer mesajı okudum ... Bu, -m32 için sorunu çözdüğünü düşünüyorum, ama aradığım şey değildi. Uzun bir süre sonra buna geldi: https://lists.ubuntu.com/archives/foundations-bugs/2013-November/173202.html

Bu yüzden dpkg -l libc6 * komutunu çalıştırmayı deneyin ve libc6-amd64 öğesini görürseniz bu size yardımcı olabilir. Ama dikkatlice okuyun esp. nokta 2, çünkü libc6-amd64 paketini kaldırdıktan sonra herhangi bir komutu kullanamayacaksınız, bu yüzden bir liveCD hazırlayın ve talimatları takip edin :) Sorunu çözmeme yardımcı oldu, ama yaklaşık 3 saat sürdü ve birkaç korku anı aldı . Bunu yapmadan önce verilerinizi yedeklemenizi tavsiye ederim, çünkü başarısız olursanız muhtemelen geri dönüş yolu olmayacaktır.

Ve 4. noktada dikkatli olun! Burada önerilen komutu yazamazsınız
ln -s /lib/x86_64-linux-gnu/ld-2.17.so /lib64/ld-linux-x86-64.so.2 çünkü canlı cd'de sembolik bir bağlantı kuracaktır/ klasöründe . Ayrıca lib64'e yazmak için kök haklarına sahip olmalısınız. Peki nasıl yaptım: (liveCD terminali aracılığıyla kırık valgrind diskimde / klasör açtım)

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

Umarım bir şey unutmadım ve bu yardımcı olacaktır.

Not: libc6-amd64 paketini kaldırmadan önce symlink'i değiştirmenin mümkün olup olmadığını merak ediyorum (tüm liveCD şeylerini atlarsınız) ama emin değilim.


Lütfen dilinizi izleyin !!!
Panther
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.