Bạn có nhớ để lại nhận xét của mình về điều này nếu bạn có thực sự có kinh nghiệm liên quan đến tiêu đề ở trên không? Tôi đã cố gắng để làm cho một đối tượng được chia sẻ để được trì hoãn tải với cả Clang và GCC trên Ubuntu (tôi thực sự không nhớ trình biên dịch được sử dụng), nhưng họ không thực sự hỗ trợ bất kỳ tính năng tải chậm trễ (tôi mong đợi tính năng tải chậm trễ đặt một sơ khai trong một đối tượng cha mẹ, mà đã cố gắng để tải một đối tượng khác theo yêu cầu, tại một thời điểm khi chức năng được yêu cầu, nhưng nó thực sự không). Các lệnh sau đây cho thấy rằng tôi đã cố gắng để làm cho libbar.so được nạp trễ so với libfoo.so:Clang/GCC có thực sự hỗ trợ tính năng tải chậm không?
clang bar.c -fPIC -shared -o libbar.so
clang foo.c -Wl,-zlazy,lL'/path/to/where/lib/is',-lbar -o foo
Bạn sẽ thấy libfoo.so nâng một ngoại lệ trước khi vào đến mục nếu libbar.so làm không tồn tại. Dù sao, tôi không nhớ nếu có bất kỳ lỗi đánh máy nào trong các lệnh trên, nhưng muốn biết Clang/GCC thực sự hỗ trợ tính năng tải chậm trễ hoặc không.
Cá nhân, tuy nhiên, tôi không thể tin rằng nếu các nhà phát triển chương trình Linux đã yêu cầu gọi dlopen() hoặc dlsym() để làm cho một đối tượng được chia sẻ bị trì hoãn tải nếu Clang/GCC không hỗ trợ bất kỳ tính năng tải chậm trễ nào. Nó có thể được okay nếu đối tượng được viết bằng C, nhưng nếu nó được viết bằng C++, tình hình phải hoàn toàn phức tạp: (
Tôi tin rằng một giải pháp được thực hiện với sự trợ giúp từ trình biên dịch hoặc liên kết là tốt nhất vì Tôi đã thực hiện thành công nó với Windows và Mac OS.Vì vậy, tôi cảm thấy nó sẽ là một phản ứng tự nhiên, nơi công dân muốn ước mơ để có một tính năng tải chậm trễ ngay cả trên Clang/GCC.Tôi cũng sẽ đánh giá cao nếu bạn có bất kỳ bình luận về tôi cảm giác.
PS. tôi biết Solaris hỗ trợ một tính năng chậm trễ bốc nhưng điều đó không phải là một con đường để đi cho tôi bởi vì tôi sẽ không phát triển bất cứ điều gì trên đó.
Dù sao, cảm ơn bạn rất nhiều trước.
Vâng, điều này có thể được thực hiện trên Linux. – kec
@ kec, cảm ơn. Bạn có nghĩa là GCC/Clang có thể làm cho một đối tượng được chia sẻ chậm trễ tải bằng cách đi qua một số tùy chọn cho họ? Có bất kỳ tài liệu chính thức nào mô tả cách sử dụng nó không? Thật tuyệt khi biết bạn có thể giải thích tại sao tôi nhận được kết quả ở trên không. – Doofah
Thực ra, sau khi đọc lại, tôi không chắc tôi biết bạn đang nói về điều gì. Bạn đang nói về dlopen()? Bạn muốn điều gì xảy ra? – kec