2012-11-02 30 views
13

Tôi cần liên kết tĩnh glibc với dự án của tôi, vì nền tảng đích chỉ hỗ trợ một dự án rất cũ (nhưng nó hoạt động với glibc tĩnh từ chuỗi công cụ của tôi, tôi đã kiểm tra nó)Liên kết glibc tĩnh nhưng một số thư viện khác tự động với GCC

Thật không may, ứng dụng này phải sử dụng thư viện pthread, nhưng libpthread được liên kết tĩnh chiếm quá nhiều không gian.

Tôi muốn liên kết tĩnh glibc và tự động pthread.

Sau khi chạy lệnh này

powerpc-unknown-linux-gnu-gcc object_files -lrt -lpthread -Wl,-Bstatic -lc 

tôi nhận được:

/powerpc-unknown-linux-gnu/bin/ld: cannot find -lgcc_s 
+0

Bạn sẽ cần phải thêm '-Wl, -Bdynamic' sau khi' -lc'. –

+0

Ồ, tôi xin lỗi đó là lỗi của tôi. Tôi muốn liên kết glibc tĩnh – nkdm

+0

Related: http://stackoverflow.com/questions/809794/use-both-static-and-dynamically-linked-libraries-in-gcc –

Trả lời

12

Có một -static-libgcc nếu có thể giúp

+0

Cảm ơn, nó hoạt động, nhưng chương trình vẫn còn quá lớn với nó. – nkdm

+1

@nkdm sau đó bạn cần phải đi với gợi ý của R .. của uclibc – Anycorn

+10

Đối với các libgcc hồ sơ không phải là glibc (đó là những gì tiêu đề của câu hỏi SO này là về). glibc là triển khai GNU của thư viện chuẩn C. libgcc là một phần của gcc internals và được sử dụng bởi gcc "bất cứ khi nào nó cần thực hiện một số thao tác quá phức tạp để phát ra mã nội tuyến cho". –

8

Bạn nên sử dụng -static, không -Wl,-static. Sau này bỏ qua kiến ​​thức của gcc và do đó gcc vẫn đang cố gắng liên kết số chia sẻ libgcc_s.so chứ không phải là tĩnh libgcc_eh.a.

Nếu mục đích của bạn là để liên kết libc tĩnh nhưng libpthread động, điều này chỉ đơn giản là sẽ không hoạt động. Bạn không thể trộn và kết hợp các phiên bản khác nhau của libpthread; nó là một phần của glibc, chỉ là một tập tin riêng biệt, và nội bộ cần phải khớp. Ngay cả với cùng một phiên bản, tôi nghĩ rằng liên kết libc tĩnh và libpthread tự động sẽ rất bị hỏng.

Nếu glibc quá lớn đối với nhu cầu của bạn, bạn có thể thử một libc thay thế như uClibc hoặc musl.

+0

Nhưng tôi cần phải có lpthread liên kết động. Tùy chọn -static sẽ liên kết mọi thứ tĩnh. – nkdm

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