Tôi có một hệ thống mà tôi không có quyền truy cập root, nhưng tôi cần phải cài đặt phiên bản hiện tại của GCC (4.7.2).Xây dựng GCC với glibc ở một vị trí không chuẩn mà không có gốc
Hệ thống đang chạy phiên bản x86_64 của Linux 2.6.18 và đã có GCC 4.1 (không hỗ trợ C++ mặc dù --version cho biết nó được xây dựng với nó).
EDIT 5: Tại thời điểm này, các bước dưới đây chỉ là một tập hợp những thứ tôi đã thử. Tôi đã bắt đầu làm sạch một vài lần kể từ đó. Tôi đang tìm ai đó để trình bày chi tiết thứ tự chính xác mà tôi cần để làm mọi thứ với tất cả các công tắc được yêu cầu.
Đây là quá trình tôi đã trải qua cho đến nay (nơi ROOT là một thư mục trong thư mục chính của tôi)
make-3.82>./configure --prefix=$ROOT && make && make install && hash -r
binutils-2.23>./configure --prefix=$ROOT && make && make install
autoconf-2.69>./configure --prefix=$ROOT && make && make install
automake-1.9>./configure --prefix=$ROOT && make && make install
flex-2.5.37>./configure --prefix=$ROOT && make && make install
libunwind-1.1>./configure --prefix=$ROOT && make && make install
gcc-4.7.2-scratch>../gcc-4.7.2/configure --prefix=$ROOT \
--disable-multilib --disable-nls --enable-languages=c,c++ \
&& make && make install && hash -r
ncurses-5.9>./configure --prefix=$ROOT && make && make install
texinfo-4.13>./configure --prefix=$ROOT && make && make install
glibc-2.14-scratch>touch $ROOT/etc/ld.so.conf
Patched glibc với bản vá từ http://sourceforge.net/apps/trac/unattended/wiki/ModifyingTheBootDisk#PatchGLibc (số dòng chỉnh cho 2.14)
glibc-2.14-scratch>../glibc-2.14/configure --prefix=$ROOT \
--with-headers=$3_3_4_HEADERS && make && make install
Cờ tôi đã thêm là để loại bỏ undefined reference to '__isoc99_sscanf'
. Tôi không biết sự kết hợp của lá cờ thực sự cần thiết để sửa chữa điều đó, nhưng nó đã khắc phục vấn đề với những lá cờ này.
gcc-4.7.2-scratch2>../gcc-4.7.2/configure --prefix=$ROOT \
--disable-multilib --disable-nls --enable-languages=c,c++ \
CPPFLAGS="-I$ROOT/include" CFLAGS="-g -O2 -lc" \
CXXFLAGS="-g -O2 -lc" LDFLAGS="-L$ROOT/lib \
-L$ROOT/lib64" && make && make install
Bây giờ tôi nhận được lỗi này trong GCC xây dựng:
build/genmddeps ../../gcc-4.7.2/gcc/config/i386/i386.md > tmp-mddeps
build/genmddeps: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by build/genmddeps)
Các lỗi có ý nghĩa vì libc trong/lib64 là phiên bản 2.5, nhưng tôi không biết làm thế nào để có được GCC sử dụng cái mà tôi đã cài đặt để $ ROOT/lib.
EDIT 1: Thêm -rpath không giúp được gì, nhưng tôi đã thêm thư mục lib của mình vào LD_RUN_PATH và LD_LIBRARY_PATH. Với những bộ này tôi không thể chạy bất cứ điều gì vì tôi đã gặp lỗi [program_name]: error while loading shared libraries: /home/mrambiguous/root/lib/libc.so.6: ELF file OS ABI invalid
Một điều lạ khác cần lưu ý là khi tôi thử đề xuất -rpath, tôi bắt đầu nhận được lỗi từ GCC về các tùy chọn dòng lệnh không được công nhận (như - V). Tôi đã phải thiết lập nó để sử dụng GCC 4.1 của hệ thống. Bây giờ tôi không chắc chắn nếu xây dựng GCC đầu tiên của tôi bị hỏng bằng cách nào đó hoặc nếu nó đã từng được sử dụng ở nơi đầu tiên.
CHỈNH SỬA 2: Tôi vừa mở libc.so.6 trong vim để xem tôi có thể tìm thấy bất kỳ điều gì về ABI ở dạng văn bản thuần túy hay không và nó có trong đó thông tin bản quyền. libc ABIs: UNIQUE IFUNC
Nó cũng xác nhận rằng GCC 4.7.2 đang làm việc trong cùng một khối văn bản. Compiled by GNU CC version 4.7.2
CHỈNH SỬA 3: Đã xóa $ ROOT, cài đặt lại mọi thứ, cùng vấn đề không nhận dạng -V và -qversion làm tùy chọn hợp lệ.
EDIT 4: Tôi cố gắng chỉnh sửa tiêu đề ELF bằng cách sử dụng brandelf -t SVR4 libc.so.6
, nhưng điều đó chỉ mang lại cho tôi một lỗi mới unexpected PLT reloc type 0x25
Vượt qua "-L $ ROOT/lib" thay thế hoặc làm phụ phí? – lynxlynxlynx
Tôi đang làm điều đó. '../gcc-4.7.2/configure [snip] LDFLAGS =" - L $ ROOT/lib -L $ ROOT/lib64 "' –
Bạn liên kết với libc của riêng bạn, nhưng bạn không nói kết quả thực thi ở đâu tìm 'libc' khi chạy. '-L' không làm điều đó, bạn cần' -rpath = $ ROOT' trong 'LDFLAGS' ngoài' -L'. –