Làm thế nào tôi có thể có được một trình biên dịch C tĩnh?


8

Tôi đang chơi xung quanh với môi trường chroot và tôi muốn có một trình biên dịch C di động để tôi có thể dễ dàng thiết lập một số công cụ xây dựng cơ bản trong mỗi môi trường mà không phải di chuyển quá nhiều thư viện xung quanh.

Gcc có vẻ khá thú vị đối với những gì tôi muốn làm, nhưng nếu nó dễ dàng xây dựng một gcc tĩnh, tôi sẽ không bận tâm đến vài chục megabyte.

Tôi cũng đang xem Trình biên dịch Tiny C, nhỏ hơn nhưng vẫn có vẻ như nó có một bộ tính năng ấn tượng. Tuy nhiên, việc chạy ./cool - trợ giúp trong thư mục nguồn không liệt kê bất kỳ tùy chọn nào để xây dựng tcc tĩnh và tôi không chắc làm thế nào nó có thể được thực hiện theo cách khác.


Để trả lời bạn mối quan tâm thứ yếu, sử dụng bộ nhớ, đây là một vài giải pháp: Bạn có thể tạo các thư mục bóng chỉ chứa các liên kết cứng đến GCC; Bạn có thể sử dụng bộ chứa docker (bộ chứa an toàn hơn chroot và docker cung cấp một hệ thống tập tin liên minh, cho phép bạn tiết kiệm bộ nhớ).
ctrl-alt-delor

Câu trả lời:


1

Xây dựng một nhị phân tĩnh phải đơn giản như chạy gcc với -static hoặc nếu ld được gọi trực tiếp sử dụng -Bstatic. Thử

CFLAGS=-static make

sau khi chạy configure. Nếu thất bại, kết quả sẽ rõ ràng, ví dụ như bè của các tham chiếu không xác định tại thời điểm liên kết.


1
Tôi đã thử make CFLAGS=-staticngay bây giờ. Tạo một số cảnh báo về dlopen, sau đó khi tôi cố chạy chương trình thực thi trong môi trường chroot, tôi /usr/lib/crt1.o .. crti,o .. crtn.okhông tìm thấy lỗi. Đó có phải là những gì bạn có nghĩa là "tham chiếu không xác định tại thời điểm liên kết"?
math4tots

Các lỗi tôi mong đợi có thể là do thiếu các phiên bản tĩnh của các thư viện, như crt1.o, nhưng trình liên kết sẽ khiếu nại ngay lập tức. Nếu bạn thấy các lỗi trong thời gian chạy, thì nhị phân không được liên kết tĩnh.
Kyle Jones

Tôi nghĩ rằng bạn đã hiểu nhầm câu hỏi: math4tots muốn trình biên dịch C hoạt động như một nhị phân độc lập (hoặc ít nhất là một tập tin dễ nhận dạng) không phải là trình biên dịch C tạo ra các nhị phân độc lập.
Gilles 'SO- ngừng trở nên xấu xa'

1
Vâng, tôi hiểu điều đó. Sản xuất một trình biên dịch liên kết tĩnh là bước đầu tiên cần thiết và là một câu hỏi mà dường như đang được hỏi về.
Kyle Jones

1
@Gilles Cách tốt nhất để có được trình biên dịch C dưới dạng nhị phân độc lập là xây dựng nó từ nguồn bằng trình biên dịch mà bạn đã có.
OrangeDog

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.