2012-04-30 51 views
5

Chương trình của tôi được xây dựng như một bộ tải và nhiều mô-đun được chia sẻ các thư viện. Bây giờ một trong những thư viện này sử dụng pthreads và có vẻ như nó được gắn với module động (được nạp khi khởi động). Bây giờ nó sẽ đơn giản hơn nếu tôi có thể buộc pthreads được liên kết vào tập tin mô-đun. GCC trên Linux, làm thế nào để tôi làm gì? Tôi đoán libpthread.a là cần thiết ....Buộc GCC liên kết tĩnh ví dụ: pthreads (và không liên kết động)

+0

Trong trường hợp nào bạn phải làm bất cứ điều gì khác ngoài việc bao gồm tiêu đề pthread để làm cho nó xây dựng? Bạn có một ví dụ nguồn? Đây có phải là phương pháp biên dịch tuyệt đối phải không? –

Trả lời

16

Trong khi liên kết libpthread.a vào thư viện được chia sẻ về mặt lý thuyết có thể, đó là ý tưởng thực sự kém . Lý do là libpthread là một phần của glibctất cả các phần của glibcphải khớp chính xác hoặc bạn sẽ thấy các sự cố lạ và không giải thích được.

Vì vậy, liên kết libpthread.a vào thư viện chia sẻ của bạn sẽ:

  1. Nguyên nhân chương trình của bạn sụp đổ khi chuyển đến một máy tính với một phiên bản khác của glibc
  2. Nguyên nhân chương trình hiện tại của bạn sụp đổ khi máy hiện tại của bạn của glibc là đã nâng cấp nhưng mô-đun của bạn không được liên kết lại với cập nhật libpthread.a.

Tự khắc phục và không làm điều đó.

+0

: Ôi chúa ơi, ôi trời ơi, Tốt là bạn nói rõ. Nhưng khi một phần của glibc, .../tôi bị biến dạng .. – imacake

+1

Cảm ơn. Giống như câu trả lời. Một truy vấn mặc dù - Nếu libpthread là một phần của libc/glibc, tại sao nó được cung cấp như một thư viện riêng biệt. Hầu như tất cả các libs đều liên kết tới libc và sau đó, nhu cầu của libpthread – Kiran

+0

@Kiran là gì? Tại sao nó được cung cấp như một thư viện riêng biệt - bởi vì nhiều chương trình không cần luồng và liên kết trong 'libpthread' áp đặt chi phí không cần thiết trên chương trình. –

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