2012-11-16 13 views
6

Tôi đã biên dịch chéo Valgrind (http://valgrind.org/downloads/valgrind-3.8.1.tar.bz2) cho ARM bằng cách sử dụng các lệnh sau với Linaro Toolchain trên Ubuntu 10.04 máy chủ của tôi (tôi đang sử dụng Buildroot):Valgrind cho ARM với Linaro Toolchain yêu cầu libc6-dbg với 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 

Khi tôi sao chép các tập tin nhị phân để hội đồng mục tiêu ARM của tôi, tôi nhận được lỗi sau:

==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. 

My Linaro toolchain Phiên bản:

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

Tôi đã tìm kiếm trên Google nhưng không thể tìm thấy giải pháp cho điều này. Làm thế nào tôi có thể nhận được Valgrind để làm việc trên bảng mục tiêu của tôi? Tôi sử dụng Buildroot để xây dựng hệ thống của mình nhưng libc6-dbg không phải là một gói mà tôi có thể tìm thấy trong hệ thống xây dựng. Có một số thư mục hoặc tập tin tôi cần phải sao chép từ sysroot toolchain? Cảm ơn -

Lệnh Tôi đang sử dụng để chạy Valgrind được hiển thị ở đây:

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

Bạn có thể chỉ định lệnh nào bạn sử dụng để chạy Valgrind trên mục tiêu, để chúng tôi có thể thử tạo lại sự cố không? Cảm ơn. –

+0

Thomas, tôi đã thêm các lệnh của mình vào bài đăng ở trên - Cảm ơn. – PhilBot

+0

Xin chào Thomas, bạn có thể tái tạo điều này không? Tôi vẫn thấy vấn đề này với bản cài đặt Buildroot Valgrind của tôi. Cảm ơn! – PhilBot

Trả lời

1

Tôi đã gặp phải vấn đề tương tự và đã tìm ra giải pháp. Vì vậy, trong trường hợp ai đó đối mặt với nó cũng có, đây là cách tôi đã thực hiện những điều đã xảy ra: Lý do tại sao Valgrind không thể gỡ lỗi ứng dụng là các biểu tượng bị thiếu trong thư viện C. Trong khi xây dựng buildroot với một toolchain bên ngoài (Linaro), chúng ta có thể tìm thấy các thư viện C không bị tước trong cây Linaro. trong thư mục arm-linux-gnueabihf \ libc \ lib \ arm-linux-gnueabihf, bạn sẽ tìm thấy các thư viện không bị tước. Đơn giản chỉ cần sao chép các tập tin không tước trên mục tiêu của bạn .. Đó là nó. Hy vọng điều này sẽ giúp người khác.

+0

Làm cách nào bạn sao chép các tệp không bị tước đi mục tiêu? Khi tôi sao chép chúng trên nó phá vỡ hệ điều hành. Hay bạn đang sao chép chúng vào một vị trí riêng biệt và thay đổi LD_LIBRARY_PATH? – Fred

0

Xin lỗi tôi đang đem lại cho bạn một liên kết đến các gói Tôi không sử dụng bởi bản thân mình, nhưng hy vọng nó sẽ làm việc:

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

+0

Cảm ơn đề xuất - Tôi đã tải xuống .deb và trích xuất nội dung của nó vào thư mục/lib của tôi trên bảng mục tiêu. Tuy nhiên, hội đồng quản trị của tôi sẽ không khởi động ngay bây giờ. Tôi xem TeraTerm và hạt nhân khởi động nhưng nó chỉ bị treo sau khi tải hạt nhân. Phải có một số loại không tương thích ở đây. – PhilBot

+1

bạn có chắc là nó đủ để chỉ trích xuất gói? có thể có một số kịch bản cài đặt thực hiện một số thiết lập cần thiết, vv ... –

5

Vì vậy, bạn đang sử dụng Buildroot hoặc OpenEmbedded để xây dựng Libc của mình?

Nếu đó là OE thì bạn nên có gói libc6-dbg có sẵn trong kho lưu trữ cục bộ (TMPDIR/deploy/ipk). Hoặc thêm "dbg-pkgs" vào IMAGE_FEATURES và xây dựng lại hình ảnh của bạn.

Glibc 2,12 cho biết bạn đang sử dụng phiên bản OpenEmbedded cũ. Nhưng ngay cả điều này sẽ cung cấp cho bạn gói libc6-dbg.

Không thể giúp Buildroot không bao giờ sử dụng nó.

+0

Cảm ơn câu trả lời - Tôi thực sự đang sử dụng Buildroot và chỉnh sửa câu hỏi của mình để làm rõ điều đó. Hy vọng rằng câu trả lời của bạn sẽ giúp người khác với vấn đề này mặc dù. – PhilBot

1

Bạn cần librairies unstripped trong mục tiêu của mình.

2 cách để thực hiện.

trong cấu hình buildroot của bạn:

1- thực hiện một hệ thống unstripped: BR2_STRIP_none = y Nó sẽ làm cho một hình ảnh mục tiêu rất lớn

2- unstrip chỉ thư mục Librairie. BR2_STRIP_EXCLUDE_DIRS = "lib"

+0

Tôi đang sử dụng một toolchain bên ngoài (Linaro) và nếu tôi cố gắng để chuyển đổi các ld - * .vì vậy trên bảng của tôi, tôi nhận được một hạt nhân hoảng loạn khi khởi động lại. Buildroot không xây dựng chuỗi công cụ của tôi vì vậy tôi không thể tạo các tệp nhị phân tương thích/lib để khởi động bằng cách sử dụng phương thức này. – PhilBot

Các vấn đề liên quan