Tôi đang cố gắng vượt qua các chương trình biên dịch (hiện tại là avconv từ libav) cho điện thoại Nokia N9 sử dụng arm-linux-gnueabi-gcc từ kho lưu trữ 64 bit của Linux Mint. Phiên bản libc của trình biên dịch là 2.15 và điện thoại có libc-2.10.1. Chúng có một sự không tương thích trong thư viện toán học, nó mang lại cho tôi một segfault khi tôi biên dịch và chạy chương trình avconv từ libav.Biên dịch chéo: GCC bỏ qua --sysroot
Tôi cần biên dịch và liên kết với phiên bản libc cũ hơn, nhưng tôi chưa quản lý tùy chọn --sysroot
hoạt động.
Tôi đã thực hiện một chương trình thử nghiệm nhỏ để tránh lặp lại việc định cấu hình và biên dịch libav.
arm-linux-gnueabi-gcc --sysroot=/opt/CrossCompilation/NokiaN9/ -o output.sysroot hello.c
arm-linux-gnueabi-gcc -o output.nosysroot hello.c
Cả hai lệnh đều tạo tệp đầu ra giống hệt nhau. Đây là những gì hello.c
trông giống như:
#include <stdio.h>
#include <math.h>
int main() {
printf("Hello, World! Sin = %f\n", sin(0.6451));
}
Phần kỳ lạ là gcc hoàn toàn bỏ qua các tùy chọn --sysroot
. Nếu tôi vượt qua một thư mục không tồn tại để sysroot, nó vẫn sản xuất chính xác cùng một đầu ra nhị phân:
arm-linux-gnueabi-gcc --sysroot=/foo/bar -o output.foobar hello.c
Nó thậm chí không phàn nàn về bất kỳ lỗi nào. Có chuyện gì vậy?
Chạy trình biên dịch bằng 'arm-linux-gnueabi-gcc -v' và xem xét giá trị của ** - with-sysroot **; đây là thư mục trình biên dịch được xây dựng cùng. Nếu bạn có thư mục này trên máy của bạn (có thể với một trình biên dịch khác), thì '--sysroot' có thể không hoạt động. Phiên bản 'gcc' là gì? –
Không có "--with-sysroot" được xác định. gcc là phiên bản 4.6.3 – trololo
Nhưng thay vào đó 'grep/usr/arm' tìm thấy "--with-gxx-include-dir =/usr/arm-linux-gnueabi/include/C++/4.6.3", "--includedir =/usr/arm-linux-gnueabi/bao gồm "," --với tiêu đề =/usr/arm-linux-gnueabi/include "và" --with-libs =/usr/arm-linux-gnueabi/lib ". – trololo