yüklenen paylaşılan kütüphane gecikme yapmayı gecikme Linux üzerinde yüklenen (kütüphanesini " libbar.so " adını let) ve umutla hayata geçirilmelidir yardımı ile sadece bir linker, C++ ile yazılmış kaynak koddaki herhangi bir şeyi değiştirmeyerek; ebeveyn kütüphanesinin kaynak kodunda ben Dlopen çağırmak istemiyorum demek() ne de dlsym() libbar.so bir fonksiyonu çağırmak için (en " libfoo.so " şeklinde adlandırır let) Çünkü kaynak kodu dağınık ve bakım sürecini zorlaştırıyorlar.nasıl paylaşılan kitaplık yapmak için bir yol aradım Linux
Neyse, bugüne kadar internette soruma ilişkin bazı belirsiz bilgi parçalarını bulduk (Kısacası, ben bile Linux üzerinde Visual Studio'nun /DELAYLOAD seçeneğe benzer şekilde devam bekliyorum), Bu nedenle, sizden gelen tüm soruların cevaplarını açıklığa kavuşturmak için aşağıdaki soruları cevaplamak çok güzel olurdu.
- GNU LD destek Linux üzerinde herhangi bir gecikmenin yükleme mekanizması mı?
- Yoksa, Clang?
- dlopen() ailesi, Linux'ta paylaşılan bir kitaplık gecikmesi oluşturmanın tek yolu nedir?
kütüphaneye bir yol ile GCC (g ++) ile -zlazy bayrağı geçmek test sahip değil (o bayrağı kabul gibiydi ama davranış yüklü gecikme libbar.so yapma bakmadı libbar.so, libbar.so'un ilk çağrısında bir istisna olmasını bekliyordum, ancak istisna aslında libfoo.so'a girmeden önce kaldırıldı. Öte yandan, Clang (clang ++) seçenek bayrağını dikkate almadığına dair bir uyarı yaptı.
çınlama (daha önce en az 3.4 ve) bağlamak için gnu ld kullanır, böylece Orada herhangi bir yardım bulamazsınız. –
@ Mats, yorumunuz için teşekkürler. Tamam, soru üzerine Clang'ı asla düşünmeyeceğim ve daha sonra yukarıdaki orijinal açıklamayı düzenleyeceğim. – Doofah
Daha önce sorulmuştu: http://stackoverflow.com/questions/2957292/delay-load-equivalent-in-unix-based-systems – oakad