2013-03-05 42 views
5

Tôi đang gặp khó khăn khi biên soạn một thư viện cho bảng điều khiển của mình bằng cách sử dụng autconf.Biên dịch chéo cho ARM Với Autoconf

Tôi đang sử dụng dòng này:

./configure --target=arm-linux --host=arm-linux --prefix=/bla/bla/bla/linux_arm_tool CFLAGS='-m32' 
make 
make install 

Khi tôi làm file để kiểm tra xem nó tôi nhận được:

libjpeg.so.8.4.0: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, not stripped 

Đó dường như không đúng chút nào, nhưng tôi đã cố gắng sử dụng nó anyway. .. và tôi nhận được:

/usr/lib/gcc/arm-linux-gnueabi/4.5.3/../../../../arm-linux-gnueabi/bin/ld: skipping incompatible /bla/bla/bla/bla/../linux_arm_tool/lib/libjpeg.so when searching for -ljpeg 

Tôi đang thua lỗ, tôi đã googling trong một giờ ...

Trả lời

12

Vì vậy, tôi biết tôi đã biên soạn chéo trước khi sử dụng các cuộc gọi phương pháp thực sự cơ bản và tôi đã tìm ra lý do tại sao tôi đã nhận được đi với điều này trước khi sau khi xem xét kết quả:

checking for arm-linux-gnueabi-gcc... no 
checking for gcc... gcc 
... 
... 
checking for arm-linux-gnueabi-gcc... gcc 

Trong tôi /usr/bin không có arm-linux-gnueabi-gcc, tôi phải:

ln -s /usr/bin/arm-linux-gnueabi-gcc-4.5 /usr/bin/arm-linux-gnueabi-gcc 

tôi thành công cross-biên dịch sử dụng:

./configure --host=arm-linux-gnueabi -prefix=${CSTOOL_DIR}/linux_arm_tool 

như để liên kết ... Tôi vẫn phải kiểm tra một số thứ, nhưng tôi sẽ giả sử tôi có thể cần phải ném một số -rpath-link cờ trong biên dịch nâng cao hơn.

+1

Tôi thậm chí không có "/usr/bin/arm-linux-gnueabi-gcc-4.5"! Nhưng tôi đã cài đặt nó qua "apt-get install gcc-arm-linux-gnueabi" –

3

Bạn cần ghi đè các biến môi trường CC, LD và các biến thích hợp khác. Thiết những công tắc không nói với cấu hình nơi chuỗi công cụ chéo của bạn là (nó có thể là bất cứ nơi nào)

Kiểm tra ra một số hướng dẫn cho nhiều dự án, ví dụ: http://wiki.wxwidgets.org/Cross-Compiling_Under_Linux

Ngoài ra, đây là một kịch bản tôi đã thực hiện để thiết lập chéo biên dịch cho Node.js - cùng ý tưởng: https://gist.github.com/edhemphill/5094239

Các libjpeg sẽ không làm việc b/c đó là một nhị phân x86, bạn cần nó nói:

ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, not stripped 

hoặc tương tự.

Đây là lý do bạn đang nhận được một skipping incompatible

+0

có mà làm cho cảm giác hoàn hảo, và dự kiến ​​sẽ càng nhiều. Tôi chỉ không thể tìm ra nơi biên dịch đã đi sai. Điểm của cờ --target là gì nếu nó không tự động sử dụng các trình biên dịch và trình liên kết chính xác? – Constantin

+2

Miễn là bạn không xây dựng một trình biên dịch (nhìn vào 'libjpeg.so' đã đề cập đến tôi không nghĩ vậy) cờ' --target' sẽ không có bất kỳ anyways sử dụng nào. '--target' chỉ định kiến ​​trúc của máy mà nhị phân được tạo sẽ tạo ra kết quả đầu ra. Do đó một bộ lắp ráp được xây dựng trên máy A mà sau đó chạy trên máy B để lắp ráp mã cho máy C sẽ sử dụng: --buid = A --host = B --target = C. Nếu nhị phân được tạo không tạo ra bất kỳ mã nào, cờ '--target' không thực hiện bất kỳ thay đổi nào. – mikyra

+0

Vì vậy, tôi khá nhiều nghĩa vụ phải thiết lập toàn bộ Makefile thông qua các biến môi trường, xuống đến các cờ liên kết như '-rlink-path'? – Constantin

5

Tôi nghĩ rằng sự cố có thể được khôi phục thường xuyên hơn như sau: "Làm thế nào để tôi sử dụng Autoconf để biên dịch chéo cho ARM?"

Theo ./configure -h:

System types: 
    --build=BUILD  configure for building on BUILD [guessed] 
    --host=HOST  cross-compile to build programs to run on HOST [BUILD] 

Các tài liệu chính thức GNU là hữu ích cho việc trả lời câu hỏi này:

http://www.gnu.org/software/autoconf/manual/autoconf-2.67/html_node/Hosts-and-Cross_002dCompilation.html

Lưu ý khi họ xác định việc sử dụng --host và và --build:

Therefore, whenever you specify --host, be sure to specify --build too. 

Và đây là một ví dụ mà tôi vừa sử dụng để cấu hình iperf cho nền tảng ARM được nhúng của mình:

Kịch bản "./configure" thực sự được gọi là "Tự động điền". Ý tưởng ở đây là để:

  • Có trình biên dịch chéo của bạn trong $ PATH hiện tại của bạn
  • Đặt CC và môi trường CXX biến để trỏ đến các trình biên dịch chéo
  • Give quyền --host và - -Xây dựng

    buildpath <--- my little script to setup my $PATH 
    export CC=arm_v5t_le-gcc 
    export CXX=arm_v5t_le-g++ 
    ./configure --host=armv5tl-montavista-linux-gnueabi --build=x86_64-linux-gnu 
    
Các vấn đề liên quan