Tôi có một ứng dụng sử dụng dlopen()
để tải các mô-đun bổ sung. Ứng dụng và mô-đun được xây dựng trên Ubuntu 12.04 x86_64 sử dụng gcc 4.6 nhưng cho kiến trúc i386. Các tệp nhị phân sau đó được sao chép sang một máy khác có cùng hệ điều hành và hoạt động tốt.Không thể tải thêm bất kỳ đối tượng nào có TLS tĩnh
Tuy nhiên nếu họ được sao chép vào Ubuntu 12.04 i386 sau đó một số (nhưng không phải tất cả) các module không tải với thông báo sau:
dlopen: cannot load any more object with static TLS
tôi sẽ nghi ngờ rằng điều này là do việc sử dụng __thread
biến. Tuy nhiên các biến như vậy không được sử dụng trong các mô-đun được tải - chỉ trong mô-đun bộ nạp.
Ai đó có thể cung cấp bất kỳ thông tin bổ sung nào, điều gì có thể là lý do?
Tôi đang giảm số __thread
biến và tối ưu hóa chúng (với -ftls-model
vv), tôi chỉ tò mò tại sao nó không hoạt động trên hầu hết cùng hệ thống.
Related: http://stackoverflow.com/questions/13650740/dlopen-cannot-load-any-more-object-with-static-tls – Wok