Cả gcc và gdb sự không tôn trọng --enable-static
cờ đó phải được chuyển vào configure
, cách chính xác để làm điều này là:
trong trường hợp của gdb 8.0, bạn còn phải thêm --disable-interprocess-agent
để xây dựng thành công một phiên bản tĩnh:
mkdir build-gdb && cd build-gdb && ../configure --prefix=... --enable-static --disable-interprocess-agent ...
Trong trường hợp của gcc 7.1, bạn còn phải thêm --disable-libcc1
để xây dựng thành công một phiên bản tĩnh:
mkdir build-gcc && cd guild-gcc && ../configure --prefix=... --enable-static --disable-shared --disable-libcc1 ...
Nguồn
2017-06-26 15:31:17
Có thể bạn không thể. Nếu bạn muốn, bạn sẽ phải nhận được các phiên bản tĩnh của tất cả các thư viện tiên quyết, mà có lẽ là biên dịch lại nhiều hơn là giá trị trong thời gian của bạn. Tại sao bạn muốn xây dựng GDB được liên kết tĩnh? Phiên bản được liên kết động sẽ đơn giản hơn nhiều. –
@JonathanLeffler: Nếu bạn muốn gỡ lỗi hệ thống mới được khởi động, gdb được liên kết tĩnh là cực kỳ có giá trị. Điều này thậm chí còn đúng hơn nếu hệ thống mới sẽ sử dụng ABI không tương thích từ hệ thống ban đầu mà bạn đang xây dựng - ví dụ, một libc khác hoặc một quy ước gọi điện mặc định khác. –
@R ..: tốt, nhưng sau đó bạn sẽ cần phải có được hoặc xây dựng một thư viện tĩnh cho mỗi và mọi thư viện mà GDB liên kết với. Trên hệ thống RHEL 5, điều đó có nghĩa là: libreadline.so.5, libncurses.so.5, libm.so.6, libexpat.so.0, libdl.so.2, libc.so.6,/lib64/ld- linux-x86-64.so.2 nếu đầu ra của 'ldd/usr/bin/gdb' là đáng tin cậy. Tôi không chắc liệu bạn có thực sự muốn thay thế tất cả những thư viện tĩnh, nhưng đó là danh sách các thư viện chia sẻ được sử dụng bởi 'gdb' trên nền tảng (cổ) này. –