(burada C-kitap gerçekten kapalı kaynak ile paylaşılan kitaplığı (libcustomer.so) uzatmak istiyorum :)Dinamik bağlantılı bir paylaşılan kitaplığı genişletir misiniz? Ben bilginin benim eksikliği için çok üzgünüm, C yeniyim
masif, ama herkese açıktır bilinen API
Böyle bir şey mümkün mü?
- yeniden adlandırma libcustomer.so
- uzatılmış paylaşılan kütüphane libcustomer.so benim genişletilmiş libcustomer.so aracılığıyla -loldcustomer içine liboldcustomer.so
- linki (böylece diğerleri örtülü genişletilmiş bir kullanın) oluşturmak liboldcustomer.so için
o şekilde işe yarayacağını sanmıyorum "liboldcustomer.so" eski doğrudan herhangi olmayan ekstra uygulanan yöntemler iletmek (adın öyle .bu içine değil derlenir?). Ama alternatif nedir?
# 4 için: Bunu yapmak için genel bir yol var mı, yoksa eski olana benzer bir yöntem yazmalı mıyım ve çağrıyı yönlendirmeli miyim (nasıl?)?
Orijinal libcustomer.so (= liboldcustomer.so) zaman zaman değişebileceğinden, tüm bu öğeler dinamik olarak çalışmalıdır.
Güvenlik nedeniyle, sistemimiz hiçbir LD_PRELOAD vardır (Aksi bunu :(alacağını).
genişletilmiş doğrulama-çek & bazı iyi NPE taşıma işlemleri düşünün.
peşin Yardımlarınız için !
DÜZENLEME:
cevap gösterildiği gibi sadece benim uzantısını uygulamaya ediyorum, ama şu an bir işlenmeyen durum var:
Genişletilmiş kitaplıktaki yapıları nasıl "proxy" yapabilirim? Örneğin
bu var:
customer.h:
struct customer;
customer.c:
struct customer {
int children:1;
int age;
struct house *house_config;
};
Şimdi benim müşteri extension.c içinde yazıyorum bütün kamu yöntemleri customer.c'yi oluşturur, ancak yapıları nasıl "geçebilirim"?
Zamanınız için çok teşekkürler & yardım!
İlk ek sorunuzun cevabı zaten verilmiş. İkincisi yakından ilişkilidir - C/C++, Java/.NET gibi herhangi bir ikili metainformation içermez, bu yüzden bir 'müşteri' yapısının tanımının nasıl olabileceğini tahmin edemezsiniz. Bu yapıda alanların türlerini ve adlarını hatırlasanız bile, derleyici ayarlarında sorun olabilir - ör., Alan hizalaması. –
Tamam teşekkürler. Şimdi gönderilecek cevabı deneyeceğim :) –