2012-02-20 28 views
8

Tôi đã tải xuống gdb-6.5.bz2.tar. Bỏ tập tin này. tôi viết: LDFLAGS = -static ./configureLàm thế nào tôi có thể tĩnh xây dựng GDB từ nguồn?

nhưng kết quả là tôi nhận được một gdb, mà đòi hỏi phải có một số tập tin, ví dụ: ncurses.so.5 libc.so.0 vv

Làm thế nào tôi có thể xây dựng tĩnh?

+2

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. –

+3

@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. –

+0

@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. –

Trả lời

7

This message dường như ngụ ý rằng việc sử dụng đúng là

$ make LDFLAGS=-static 

Mà dường như ngạc nhiên. Thật không may, nó cũng nói rằng nó không xây dựng, và không có theo dõi. Tuy nhiên, thông điệp là từ năm 1999 nên mọi thứ có thể đã thay đổi, có lẽ cách thích hợp ngày hôm nay là làm theo cách của bạn.

+0

Dường như không hoạt động với gdb-7. – Equidamoid

6

Bạn có thể sử dụng các tùy chọn sau cho configure kịch bản để tạo ra một tĩnh GDB thực thi:

./configure --prefix=<> --enable-static=yes && make && make install 
1

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 ...

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