2011-10-23 37 views
7

Câu hỏi là tương đối thẳng về phía trước: làm thế nào tôi có thể xây dựng một GCC của chuỗi 4.x (cùng với binutils và bạn bè) nhắm mục tiêu 2.4 ABI trên cùng kiến ​​trúc với máy chủ cho trình biên dịch?Xây dựng GCC hiện đại (4.x) để nhắm mục tiêu hạt nhân 2.4.x trên cùng kiến ​​trúc với máy chủ?

Hệ thống lưu trữ sẽ là x86 hoặc x86_64 và yêu cầu duy nhất là các tệp ELF được xây dựng chạy trên hạt nhân cũ miễn là ABI khớp. (Nguồn hạt nhân/tiêu đề tồn tại)

Cũng cần có libc tương thích để liên kết nó. Tuy nhiên, tôi cũng có thể liên kết động với nó, vì tôi biết phiên bản libc (g).

Bất kỳ con trỏ nào cũng sẽ được đánh giá cao. Tôi có phần quen thuộc với crosstool-ng, nhưng điều đó thậm chí còn không hỗ trợ 2,4 hạt nhân nữa (vì lý do rõ ràng).

+2

Trong thuật ngữ kỹ thuật, anh ta tìm cách để tìm ra cách để nhắm mục tiêu một ABI thấp hơn so với những người sử dụng bởi hầu hết các bản phân phối hiện đại, và có được một tương ứng thấp hơn .note.ABI-tag phần của nhị phân ELF. Tôi không thể tìm thấy thông tin về điều này trên web ở bất cứ đâu, vì vậy tôi đoán đây là một yêu cầu khá chuyên biệt. Có lẽ bạn muốn gửi email tới danh sách gửi thư [email protected] –

+0

@Ken Bloom: cảm ơn. Ý tưởng tốt. Thật vậy, tôi không thể tìm thấy bất kỳ con trỏ nào, vì vậy tôi nghĩ rằng tôi muốn hỏi ở đây :) – 0xC0000022L

Trả lời

1

Có lẽ cách dễ nhất là thiết lập chuỗi công cụ hiện đại trên hệ điều hành cũ.

RHEL 2.1 hoặc 3 có thể là tốt nhất, vì chúng được hỗ trợ cho đến gần đây.

Việc biên dịch gcc 4 có thể phức tạp vì bạn cũng sẽ cần thư viện toán học. Bạn có thể phải làm một cách tiếp cận nhiều giai đoạn.

EDIT:

Để biên dịch gcc mới hơn:

  1. Compile làm mới nhất - thêm vào PATH
  2. Unpack gcc
  3. Unpack mpfr, GMP, mpc vào thư mục gcc
  4. liên kết tượng trưng các thư mục được phiên bản cho cơ sở (mpfr, gmp, mpc).
  5. xây dựng và cài đặt gcc

Something như thế này:

cd ~/software 
tar xjf $DOWNLOAD/gcc/gcc-core-${GCCVER}.tar.bz2 || failure "unpack gcc failed" 
tar xjf $DOWNLOAD/gcc/gcc-g++-${GCCVER}.tar.bz2 || failure "unpack g++ failed" 

cd gcc-${GCCVER} 

tar xjf $DOWNLOAD/gmp-5.0.2.tar.bz2 || failure "unpack gmp failed" 
#tar xjf $DOWNLOAD/gmp-4.3.2.tar.bz2 || failure "unpack gmp failed" 
ln -s gmp-* gmp 
tar xjf $DOWNLOAD/mpfr-2.4.2.tar.bz2 || failure "unpack mpfr failed" 
#tar xjf $DOWNLOAD/mpfr-2.4.2.tar.bz2 || failure "unpack mpfr failed" 
ln -s mpfr-* mpfr 
tar xzf $DOWNLOAD/mpc-0.9.tar.gz || failure "unpack mpc failed" 
ln -s mpc-* mpc 

cd .. 
mkdir gcc-build 
cd gcc-build 
../gcc-${GCCVER}/configure --prefix=/opt/tools || failure "configure failed" 
make || failure "make failed" 
make install || failure "install failed" 
+0

Thật không may điều này dường như là lựa chọn duy nhất còn lại. – 0xC0000022L

0

Tôi tin rằng bạn có thể nên xây dựng một trình biên dịch chéo GCC trong trường hợp đó, và rằng bạn nên biên dịch GLibc sẽ xử lý sự phụ thuộc vào hạt nhân 2.4 cũ.

Tuy nhiên, bạn chỉ cần cố gắng biên dịch mã của mình và chỉ cần liên kết mã đó với thư viện Glibc tương thích 2,4 nhân cũ? Tôi cho rằng nó sẽ hoạt động.

Và bạn đã thử chạy nhị phân của mình (có được cách đơn giản trên một hệ thống gần đây bằng GCC gần đây) trên hệ thống cũ chưa? Những gì không hoạt động như mong đợi?

Trân trọng.

+0

Các nhị phân được xây dựng, khi bắt đầu, sẽ ném một lỗi rằng hạt nhân là quá cũ. Hay đúng hơn là bộ tải sẽ làm điều đó. – 0xC0000022L