2013-02-09 42 views
5

Tôi có một chuỗi công cụ biên dịch làm việc, nhờ crosstool-ng :) - tuy nhiên, crosstool-ng là tài liệu rất thưa thớt và tôi là người mới để biên dịch chéo. Các máy chủ cụ thể và mục tiêu không phải là, tôi nghĩ rằng, quan trọng trong bối cảnh này.crosstool-ng, cấu trúc thư mục và sysroot

Tôi có một số câu hỏi cơ bản về cấu trúc thư mục. Các toolchain đã được cài đặt vào một thư mục được đặt tên theo mục tiêu. Bên trong đó là một tập hợp các thư mục:

arm-unknown-linux-gnueabi 
bin 
include 
lib 
libexec 
share 

Tôi cho rằng đây là cho các bit biên dịch chéo thực tế, vì trình biên dịch trong bin/do làm việc cho mục đích này. Lưu ý rằng có một thư mục bên trong không rõ-linux-gnueabi /, tức là đường dẫn trong đó là ../arm-unknown-linux-gnueabi/arm-unknown-linux-gnueabi. Bên trong đó có một cây khác:

bin 
debug-root 
include 
lib 
lib32 
lib64 
sysroot 

Thư mục lib * là các liên kết tượng trưng vào sysroot /. Các công cụ trong bin có vẻ là cùng một bộ cross-biên dịch các công cụ như trong thư mục cha/bin:

> bin/gcc -v 
Using built-in specs. 
COLLECT_GCC=./gcc 
Target: arm-unknown-linux-gnueabi 
Configured with: /usr/x-tool/.build/src/gcc-4.7.2/configure 
--build=x86_64-build_unknown-linux-gnu 
--host=x86_64-build_unknown-linux-gnu 
--target=arm-unknown-linux-gnueabi 

Vì vậy, tôi đầu tiên câu hỏi là: đây là để làm gì? Và thư mục này là gì?

My câu hỏi thứ hai sau đó là: làm thế nào nên sysroot/được sử dụng? Có vẻ như đối với các thư viện hỗ trợ có nguồn gốc từ nền tảng đích, vì vậy Tôi giả sử nếu tôi xây dựng thư viện như vậy, tôi nên sử dụng nó làm --prefix, mặc dù nó sẽ giống với thư mục mẹ, vì lib * được liên kết với nhau ... "thư mục này ở giữa" với một thùng rác và các liên kết tượng trưng xuống sysroot là khó hiểu. Tôi tin rằng (một số) gói phong cách autotools có thể được cấu hình "--with-sysroot". Ý nghĩa của điều đó là, nếu tôi nhìn thấy nó, và làm thế nào nó nên được sử dụng liên quan đến các tùy chọn khác như --prefix, vv?

Trả lời

3

Đối với câu hỏi đầu tiên của bạn, như toolchain thư mục cài đặt:

  • bin/cánh tay-biết-linux-gnueabi-gcc
  • cánh tay-biết-linux-gnueabi/bin/gcc

Chúng giống nhau, thực sự là liên kết cứng.

Bạn có thể sử dụng arm-unknown-linux-gnueabi-gcc bằng CC = arm-unknown-linux-gnueabi-gcc, ví dụ:

export PATH=<toolchain installed dir>/bin:$PATH 
CC=arm-unknown-linux-gnueabi-gcc ./configure 
make 

Hoặc

export PATH=<toolchain installed dir>/arm-unknown-linux-gnueabi/bin:$PATH 
./configure 
make 

tôi luôn luôn sử dụng các hình thức đầu tiên, và tôi không chắc chắn nếu các hình thức sau hoạt động.

Đối với câu hỏi thứ hai, theo kinh nghiệm của tôi, bạn không cần phải lo ngại về sysroot. cross-compiler sẽ tìm thấy các tập tin tiêu đề C chính xác trong sysroot/usr/include tự động.

Trừ mà bạn muốn vượt biên soạn một số thư viện và cài đặt chúng vào sysroot, bạn có thể nhận được nó bằng cách

export PATH=<toolchain installed dir>/bin:$PATH 
CC=arm-unknown-linux-gnueabi-gcc ./configure --prefix=<toolchain installed dir>/arm-unknown-linux-gnueabi/arm-unknown-linux-gnueabi/sysroot 
make 
make install 
+0

tôi * vẫn * đã không nhận thấy hai thùng chứa hardlinks! – delicateLatticeworkFever

+0

Bất kể họ là hardlinks hay không, họ có cùng tổng kiểm tra md5 – Like

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