2015-01-14 22 views
6

Nếu tập tin thực thi của tôi gọi dlopen để tải thư viện nhưng bỏ qua gọi dlclose, thư viện sẽ vẫn được tải cho đến khi quá trình thoát và hệ điều hành buộc nó phải tải.Có rò rỉ tải nếu dlopen() được gọi từ thư viện dlopen'd không?

Nếu tôi tải a.so mà tải b.so, sau đó gọi dlclose trên a.so, nào hệ điều hành dỡ bỏ b.so không?

Làm cách nào để so sánh với trường hợp tương tự bằng cách sử dụng Microsoft tương đương, LoadLibraryEx?

Trả lời

3

Ứng dụng chỉ cần lo lắng về những gì ứng dụng tải trực tiếp. Nếu bạn tải a.so, tất cả những gì bạn cần phải quan tâm là dỡ hàng a.so.

Nếu a.so từ chối không tải b.so, đó là sự cố với a.so, ứng dụng của bạn không chịu trách nhiệm cho việc này. Tác giả của a.so cần hành động cùng nhau và khắc phục sự cố với thư viện của họ.

+0

Cảm ơn. Bạn có biết thông tin này có thể được tìm thấy trong tài liệu cho 'dl *' không? Tôi đọc http://linux.die.net/man/3/dlopen nhưng không tìm thấy nó – Kietz

+0

Tôi làm chủ yếu là lập trình Windows, không phải Linux/Unix, nhưng tôi không nghĩ rằng điều này cần phải được chính thức tài liệu. Tất cả một mô-đun có thể làm là chịu trách nhiệm cho chính nó thư viện tải wrt. Điều gì xảy ra nếu thư viện là một bên thứ ba, nơi bên thứ ba có thể tải 1,2,3 hoặc không có mô-đun nào, dựa trên một số cài đặt, môi trường đang được chạy, v.v. Ứng dụng của bạn sẽ theo dõi thứ ba này hay không mô-đun bên và những gì nó thực hiện trong nội bộ? Tất nhiên là không. – PaulMcKenzie

+0

Vì vậy, đây chắc chắn là trường hợp cho 'LoadLibrary *' và 'GetModuleHandle *'? Bạn có thể chỉ cho tôi tài liệu hướng dẫn cho những người đó không? – Kietz

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