2016-03-31 35 views
2

Dinamik bir paylaşılan kitaplık olarak kullanmak istediğim destek bağımlılıkları ile bazı kodları derlemeye çalışıyorum ancak herhangi bir destek bağımlılığı olmadan (bir gereksinim olarak yükseltme yüklemesi yok). Ne kadar ilgili giderim?Paylaşılan kitaplığa paketi yükleme

Ben ile benim kod derleme:

linux-vdso.so.1 (0x00007fffda9df000) 
libboost_system.so.1.60.0 => /usr/lib/libboost_system.so.1.60.0 (0x00007f934e776000) 
libboost_serialization.so.1.60.0 => /usr/lib/libboost_serialization.so.1.60.0 (0x00007f934e538000) 
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f934e1b6000) 
libm.so.6 => /usr/lib/libm.so.6 (0x00007f934deb0000) 
libc.so.6 => /usr/lib/libc.so.6 (0x00007f934db0f000) 
/usr/lib64/ld-linux-x86-64.so.2 (0x000055802a452000) 
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f934d8f9000) 
librt.so.1 => /usr/lib/librt.so.1 (0x00007f934d6f0000) 
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f934d4d3000) 

:

ldd lib/myclass.so.1 

olarak,

ancak
g++ -Wall -fPIC -o myclass.o -c myclass.cpp 
g++ -shared -Wl,-soname,myclass.so.1 -o lib/myclass.so.1 myclass.o -lc 

inşa kütüphane boost bağımlılıkları birkaç gösterir çıktı üretir Tüm destek bağımlılıklarını .so dosyasına paketlemek için g++ çağrısı üzerinde ne değiştirmeliyim?

cevap

1

Sadece bir ". Paylaşılan kütüphaneler yerine statik kütüphanelerle bağlantı kurmanız gerekir.

Çoğu Linux dağıtımında, paylaşılan kitaplıkların statik olarak bağlantılı sürümlerini içeren isteğe bağlı bir "geliştirme" alt paketi bulunur.

Bu paketi yüklemeniz ve sonra kendi kitaplığınızı nasıl bağladığınızın tamamını değiştirmeniz gerekecektir. Yerine, örneğin, "/usr/lib64/libboost_system.a" karşı açık bir bağlantıya sahip bu değiştirmek zorunda kalacak

-lboost_system 

ile bağlama veya libboost_system.a yerde yüklenir. Lather, durulama, tekrarla, ve sadece doğrudan bağladığınız artırma kütüphaneleri için değil, kütüphanelerin kendileriyle bağlantı kurduğu diğer tüm destek kütüphaneleriyle, vb. ...

Nerede, nasıl ve nasıl yapılacağı konusunda Linux dağıtım belgelerinize danışınız. Paylaşılan kitaplıkların statik bağlantılı sürümleri paketlenmiştir.

+0

Kaynağından gelen artışı derledim ve aynı dizinde statik kitaplıklara sahip oldum, bu yüzden sadece makefile değişiyor. – joaocandre

İlgili konular