Tôi đã chia sẻ đối tượng A.so liên kết tĩnh với libssl.a & đối tượng chia sẻ khác B.so cũng liên kết tĩnh libssl.a.Thư viện tĩnh được tải hai lần
A.so & B.so có các ký hiệu từ libssl.a trong phạm vi GLOBAL. Tôi đã kiểm tra điều này bằng readelf -s A.so
Tôi có tệp a.out thực thi tải A.so và B.so. Khi a.out chấm dứt tôi nhận được một lỗi miễn phí đôi trong một trong các biểu tượng từ libssl.a trong A.so.
Mặc dù libssl.a được liên kết tĩnh với từng đối tượng dùng chung, vì chúng được hiển thị trên toàn cầu là có thể cùng một biểu tượng được chia sẻ thay vì chọn bản sao cục bộ.
Giải pháp này là gì? Làm thế nào để làm cho các biểu tượng địa phương ở đây?
Vui lòng giúp
Tôi khuyên bạn nên sử dụng trình gỡ lỗi để xác nhận lý thuyết của mình. – jdigital
Bạn có thể xây dựng? – KodeWarrior
Chỉ là một điều nhỏ, bởi vì tôi không có ý tưởng làm thế nào để áp dụng nó vào tình huống của bạn: 'dlopen' có một lá cờ RTLD_LOCAL mà trong một số trường hợp sẽ giúp đỡ trong chính xác tình trạng này. Vì vậy, nếu bạn mở các thư viện đó với 'dlopen', có lẽ chúng không nên can thiệp vào đó. – liori