2013-07-11 71 views
8

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?

+4

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ì? –

+0

Không có "--with-sysroot" được xác định. gcc là phiên bản 4.6.3 – trololo

+0

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

Trả lời

1

kể từ khi tôi lãng phí một vài ngày rối tung với điều này trước khi đọc các ý kiến, tôi sẽ gửi artless noise 's ý kiến ​​như một câu trả lời:

"Chạy trình biên dịch với arm-linux-gnueabi-gcc -v và nhìn vào giá trị của --with-sysroot; 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 [; và nếu bạn làm không xem --with-sysroot và thay vào đó hãy xem --with-libs , nó] có nghĩa là gcc của bạn được biên dịch mà không cần hỗ trợ --sysroot. "

+0

Có giải pháp nào không? – user1651758

+0

Đã một thời gian kể từ khi tôi làm hỏng điều này, nhưng nếu bạn có '--with-libs' thay vì' --with-sysroot', hãy sử dụng nó? hoặc tải xuống một chuỗi công cụ khác hoặc xây dựng công cụ của riêng bạn. –

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