2011-06-29 21 views
5

Modül/kütüphanenin başka bir kütüphaneye bağlı olduğu, paylaşılan kütüphaneleri veya dinamik yüklü modülleri kullanan, ancak bağlantı kurmaya çalışmadan önce paylaşılan bir kopyanın bulunup bulunmadığını kontrol etmeyen birkaç proje geliştirme projesiyle karşılaştım. Bu, statik bir arşivden (.a dosya) çıkan dosyalara neden olan .so içine çekilmesine neden olur ve bu nesne dosyaları PIC olmayan olduklarından, sonuçta ortaya çıkan .so dosyasının TEXTREL'leri (çok kötü yükleme performansı ve bellek kullanımı) vardır veya tamamen başarısız olur (PIC olmayan paylaşılan kütüphaneleri desteklemeyen x86_64 gibi arşivlerde).Paylaşılan kütüphaneleri bağlarken gcc statik kütüphaneleri yok sayabilir miyim?

gcc derleyici sürücüsünün, statik kitaplık kodunu paylaşılan kitaplık çıktısına bağlamayı reddetmesini sağlamanın bir yolu var mı? En az miktarda libgcc.a ve benzeri ürünlerden bağlanması zor ve karmaşık görünüyor ...

cevap

1

Bildiğiniz gibi, statik kitaplıklara yalnızca bağlantı vermek için -statik kullanabilirsiniz. Sadece dinamik kütüphanelere bağlanmanın iyi bir karşılığı olabilir.

aşağıdaki cevabı yararlı olabilir ...

How to link using GCC without -l nor hardcoding path for a library that does not follow the libNAME.so naming convention?

Sen -l kullanabilirsiniz: [libraryname] .bu yüzden senin kütüphane arama yolunda karşı bağlamak istediğiniz dinamik kütüphaneleri listelemek için. .so bitişini belirtmek, muhtemelen yalnızca dinamik kitaplığınızda yardımcı olacaktır. Muhtemelen kısaltılmış sürümün yerine tüm adı 'lib' öneki ile belirtmeniz gerekecektir.

İlgili konular