2010-11-25 7 views
11

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?

+7

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

+0

İstenen kitaplığın statik olarak bağlanması gerektiğini belirtebilir miyim? – TheFuzz

+1

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

cevap

5

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

+0

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

2

, 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.