cuốn sách gpt4 ai đã làm

Biên dịch glibc:/glibc-2.7/w/elf/ld.so: Không có tệp hoặc thư mục như vậy

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 08:20:41 43 4
mua khóa gpt4 Nike

Mình muốn cài một phần mềm trong thư mục của trung tâm siêu máy tính nhưng sudo, root, thậm chí apt-get, yum đều không dùng được... Phần mềm này yêu cầu glibc2.7 nên phải cài thủ công gcc và glibc (vì mình không thể thay đổi Đường dẫn của gcc tích hợp để tìm glibc).

gcc dường như đã được cài đặt thành công:

[geosign@node117 ~/binutils/bin]$ gcc -v
Sử dụng thông số kỹ thuật tích hợp.
Mục tiêu: x86_64-unknown-linux-gnu
Được định cấu hình với: /public/home/geosign/software/gcc/configure -prefix=/public/home/geosign/gcc --with-gmp=/public/home/geosign/Gcc --with- mpfr=/public/home /geosign/Gcc --with-mpc=/public/home/geosign/Gcc --with-ppl=/public/home/geosign/ppl --with-cloog=/public/home/geosign/ppl --enable-threads=posix CFLAGS=-I/public/home/geosign/ppl/lib:/public/home/geosign/Gcc/lib CPPFLAGS=-I /public/home/geosign/ppl/lib:/public/home/geosign/Gcc/lib CXXFLAGS=-I/public/home/geosign/ppl/lib:/public/home/geosign/Gcc/lib --enable-linguages=c,c++,fortran --disable-multilib

Mô hình luồng: posix gcc phiên bản 4.4.7 (GCC)

Tuy nhiên, khi tôi biên dịch glibc bằng cách sử dụng "make", nó hiển thị:

make[3]: Rời khỏi thư mục `/public/home/geosign/software/glibc/elf'
gcc -B/public/home/geosign/binutils/ -nostdlib -nostartfiles -r -o /public/home/geosign/software/build/glibc/elf/librtld.os '-Wl,-(' /public/home/ địa chỉ/phần mềm/xây dựng/glibc/elf/dl-allobjs.os /public/home/geosign/software/build/glibc/elf/rtld-libc.a -lgcc '-Wl,-)' \
-Wl,-Map,/public/home/geosign/software/build/glibc/elf/librtld.os.map
gcc -B/public/home/geosign/binutils/ -nostdlib -nostartfiles -shared \
-Wl,-z,combreloc -Wl,-z,relro -Wl,--hash-style=both -Wl,-z,defs -Wl,--verbose 2>&1 \
LC_ALL=C\
sed -e '/^===========/,/^===========/!d;/^===========/d' \
-e 's/\. = 0 + SIZEOF_HEADERS;/& _begin = . - SIZEOF_HEADERS;/' \
> /public/home/geosign/software/build/glibc/elf/ld.so.lds
gcc -B/public/home/geosign/binutils/ -nostdlib -nostartfiles -shared -o /public/home/geosign/software/build/glibc/elf/ld.so \
-Wl,-z,combreloc -Wl,-z,relro -Wl,--hash-style=both -Wl,-z,defs \
/public/home/geosign/software/build/glibc/elf/librtld.os -Wl,--version-script=/public/home/geosign/software/build/glibc/ld.map \
-Wl,-soname=ld-linux-x86-64.so.2 -T /public/home/geosign/software/build/glibc/elf/ld.so.lds
/public/home/geosign/software/build/glibc/elf/librtld.os: Trong hàm `_dl_start_final':
/public/home/geosign/software/glibc/elf/rtld.c:290: tham chiếu không xác định đến `_begin'
/public/home/geosign/binutils/bin/ld: /public/home/geosign/software/build/glibc/elf/librtld.os: relocation R_X86_64_PC32 đối với biểu tượng ẩn không xác định `_begin' không thể được sử dụng khi tạo một đối tượng dùng chung
/public/home/geosign/binutils/bin/ld: liên kết cuối cùng không thành công: Giá trị sai
coll2: ld trả về 1 trạng thái thoát
make[2]: *** [/public/home/geosign/software/build/glibc/elf/ld.so] Lỗi 1
make[2]: Rời khỏi thư mục `/public/home/geosign/software/glibc/elf'
make[1]: *** [elf/subdir_lib] Lỗi 2
make[1]: Rời khỏi thư mục `/public/home/geosign/software/glibc'
make: *** [all] Error 2

Những câu trong Makefile của elf là:

$(objpfx)ld.so: $(objpfx)librtld.os $(ld-map)
@rm -f $@.lds
$(LINK.o) -nostdlib -nostartfiles -shared $(z-now-$(bind-now)) \
$(LDFLAGS-rtld) -Wl,-z,defs -Wl,--verbose 2>&1 \
LC_ALL=C\
sed -e '/^===========/,/^===========/!d;/^===========/d' \
-e 's/\. = 0 + SIZEOF_HEADERS;/& _begin = . - SIZEOF_HEADERS;/' \
> $@.lds
$(LINK.o) -nostdlib -nostartfiles -shared -o $@ \
$(LDFLAGS-rtld) -Wl,-z,defs $(z-now-$(bind-now)) \
$(filter-out $(map-file),$^) $(load-map-file) \
-Wl,-soname=$(rtld-installed-name) -T $@.lds
rm -f $@.lds
readelf -s $@ \
| awk '($$7 ~ /^UND(|EF)$$/ && $$1 != "0:" && $$4 != "ĐĂNG KÝ") { print p=1 } END { exit p != 0 } '

Đây là cách tôi định cấu hình glibc:

/public/home/geosign/software/glibc/configure --prefix=/public/home/geosign/glibc --with-binutils=/public/home/geosign/binutils/ --enable-shared --disable-multilib

ldd ld hiển thị:

[geosign@node117 ~/binutils/bin]$ ldd ld
linux-vdso.so.1 => (0x00007fff163be000)
libz.so.1 => /lib64/libz.so.1 (0x0000003fd1400000)
libc.so.6 => /lib64/libc.so.6 (0x0000003fd0400000)
/lib64/ld-linux-x86-64.so.2 (0x0000003fd0000000)

Cảm ơn bạn rất nhiều. Thời gian của tôi thực sự có hạn và tôi phải mất nhiều ngày.

câu trả lời hay nhất

Câu hỏi ngay lập tức của bạn là:

gcc -nostdlib -nostartfiles -shared -o -mcmodel=large \
/public/home/geosign/software/glibc-2.7/w/elf/ld.so ...

Điều này báo cho GCC tạo một tệp có tên -mcmodel=lớn tệp đầu ra thay vì tệp đầu ra dự kiến /public/home/geosign/software/glibc-2.7/w/elf/ld .so.

Bạn chưa cho chúng tôi biết cách bạn định cấu hình bản dựng GLIBC này nhưng tôi nghi ngờ bạn ./cấu hình ở đâu đó trong cuộc gọi sử dụng -mcmodel=lớn . đừng làm thế,không có lý doĐược sử dụng khi xây dựng glibc -mcmodel=lớn.

Về việc biên dịch glibc:/glibc-2.7/w/elf/ld.so: Không có tệp hoặc thư mục nào như vậy, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/33548833/

43 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress