Aynı ada sahip bir statik ve dinamik kitaplığım var: libclsocket.a ve libclsocket.so Bağlamak istediğim kütüphaneyi belirlediğimde, kütüphane olarak sadece -lclsocket girin. Programım mükemmel uyumludur ve çalışır, ancak hangi kütüphaneyi kullanıyorum? statik kütüphane veya dinamik kütüphane? Arkadaşımı programıma vermek istiyorum ve emin değilim eğer kütüphaneleri serbest bırakmaya dahil etmem gerekiyorsa. C++, CodeLite, PCLinuxOS 2010Linux'ta statik veya dinamik bir kütüphaneye bağ verip bağlamadığımı nasıl anlarım?
cevap
Sen yürütülebilir üzerinde ldd
çalışan ve görme deneyebilirsiniz bağımlılıkları listesinde gerektiği gibi algılanan .bu beraberindeki.
ldd adam sayfası here olduğunu. Eğer -static
bayrağını kullanırsanız
Paylaşılan kitaplıklara bağlanıyor. Peki, nasıl statik bir lib ile bağlantı kurabilirim? Ayrıca paylaşılan kütüphaneler için varsayılanları kabul ediyorum. – TheFuzz
, tüm bileşenlerin statik yapılacaktır. Ve -l
paylaşılan kütüphaneleri içerebilir. Bu nedenle, statik kitaplık dosya adını belirtmek (örneğin, /usr/lib/libfoo.a
ile, örneğin, -l
önceden eklendi), istediğiniz efekti elde etmelidir.
GCC ile oluştururken '-static 'bayrağı belirtmediniz, büyük olasılıkla paylaşılan nesneye bağlanıyorsunuz. @Soo Wei Tan'ın yanıtladığı gibi, çalışma zamanı bağlayıcı bağımlılarını belirlemek için ikilide 'ldd' kullanabilirsiniz. – birryree
İstenen kitaplığın statik olarak bağlanması gerektiğini belirtebilir miyim? – TheFuzz
kütüphanenin tam adını geçerek seçici bir şekilde statik link yapabilirsiniz. Gcc -o OutFile -l: libclsocket.a' gibi. ':' Not, bu çok önemlidir. Bu davranışın resmi belgelerini öğrenmek istiyorum, ancak gcc'nin man sayfaları bu kullanımdan bahsetmiyor. –
birryree