2012-11-16 55 views
6

我交叉使用與Linaro的工具鏈以下命令編譯Valgrind的(http://valgrind.org/downloads/valgrind-3.8.1.tar.bz2),用於ARM我的Ubuntu 10.04主機(我使用Buildroot裏面)上:Valgrind的用於ARM與Linaro的工具鏈需要的libc6-DBG與Buildroot裏面

export PATH=$PATH:/home/user/toolchain/linaro/bin 
CC=arm-linux-gnueabi-gcc CFLAGS=-I/home/user/toolchain/linaro/arm-linux-gnueabi/libc/usr/include LDFLAGS=-L/home/user/toolchain/linaro/arm-linux-gnueabi/libc/usr/lib ./configure --prefix=/opt/valgrind --host=armv7-none-linux-gnueabi --target=arm-none-linux-gnueabi --build=i386-ubuntu-linux 
make 
sudo make install 

當我的二進制文件複製到我的ARM目標板,我得到以下錯誤:

==413== Memcheck, a memory error detector 
==413== Copyright (C) 2002-2012, and GNU GPL'd, by Julian Seward et al. 
==413== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info 
==413== Command: /home/user/testApp 
==413== 

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:  memcpy 
valgrind: in an object with soname matching: ld-linux.so.3 
valgrind: was not found whilst processing 
valgrind: symbols from the object with soname: ld-linux.so.3 
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. 

我Linaro的工具鏈版本是:

gcc version 4.7.1 20120402 (prerelease) (crosstool-NG linaro-1.13.1-2012.04-20120426 - Linaro GCC 2012.04) 

我在Google上搜索過,但找不到解決方案。我如何讓Valgrind在我的目標板上工作?我使用Buildroot構建我的系統,但libc6-dbg不是我可以在構建系統中找到的包。是否有一些目錄或文件需要從工具鏈sysroot中複製?謝謝 -

我使用運行Valgrind的命令如下所示:

# which valgrind 
/usr/bin/valgrind 
# valgrind /home/user/MyQtApp 
==216== Memcheck, a memory error detector 
... 
... 
+0

你能指定命令你用對目標運行Valgrind的,這樣我們就可以嘗試重現該問題?謝謝。 –

+0

托馬斯,我已經將我的命令添加到上面的帖子 - 謝謝。 – PhilBot

+0

嗨托馬斯,你能重現嗎?我仍然看到我的Buildroot Valgrind安裝的這個問題。謝謝! – PhilBot

回答

1

我一直面對同樣的問題,並找到了解決方案。 因此,如果有人也面臨它,這裏是我如何做的事情發生: Valgrind無法調試應用程序的原因是C庫中缺少的符號。 使用外部工具鏈(Linaro)構建buildroot時,我們可以在Linaro樹中找到非剝離的C庫。 在arm-linux-gnueabihf \ libc \ lib \ arm-linux-gnueabihf文件夾中,您會發現沒有被剝離的庫。 只需將非剝離文件複製到您的目標上即可。就是這樣。 希望這會幫助他人。

+0

你是如何將非剝離文件複製到目標的?當我將它們複製時,會打破操作系統。還是將它們複製到一個單獨的位置並更改LD_LIBRARY_PATH? – Fred

0

對不起,我給你一個鏈接到包沒被自己使用,但希望這是要去工作:

https://launchpad.net/ubuntu-leb/oneiric/armel/libc6-dbg

+0

感謝您的建議 - 我下載了.deb並將其內容解壓到目標板上的我的/ lib目錄中。但是,我的主板現在不能啓動。我看TeraTerm和內核啓動,但它只是加載內核後掛起。這裏肯定有某種不兼容性。 – PhilBot

+1

你確定只需提取包就足夠了嗎?可能會有一些安裝腳本執行一些必要的設置,等等...... –

5

所以你使用Buildroot或OpenEmbedded來構建你的Libc?

如果是OE,那麼你應該在本地倉庫中的libc6-DBG包(TMPDIR /部署/ IPK)。或者在IMAGE_FEATURES中添加「dbg-pkgs」並重建圖像。

Glibc的2.12表明,你正在使用舊版本的OpenEmbedded的。但即使這樣應該會給你libc6-dbg包。

不能與Buildroot裏面有所幫助從未使用過它。

+0

感謝您的回答 - 我實際上使用Buildroot,並編輯了我的問題以清楚說明。希望你的回答能夠幫助其他人解決這個問題。 – PhilBot

1

您需要在您的目標中未剝離的圖書館。

2的方式來做到這一點。

在buildroot的配置:

1-做出剝開系統:BR2_STRIP_none = Y 它將使一個非常大的目標圖像

2- unstrip只有LIBRAIRIE文件夾。 BR2_STRIP_EXCLUDE_DIRS =「lib」

+0

我正在使用外部工具鏈(Linaro),如果我嘗試切換ld - *,所以在我的主板上,重新啓動時會出現內核恐慌。 Buildroot不構建我的工具鏈,因此我無法使兼容/ lib二進制文件通過使用此方法進行未劃分的引導。 – PhilBot