2008-10-16 11 views
36

GCC'yi kullanarak bir yürütülebilir dosyayı bağlamak istediğim bir paylaşılan kitaplığım var. Paylaşılan kitaplık, libNAME.so biçiminde standart olmayan bir ada sahip olduğundan, normal -l seçeneğini kullanamıyorum. (Ayrıca bir Python eklentisi olur ve bu nedenle 'lib' öneki yoktur.)LibNAME.so adlandırma kuralını takip etmeyen bir kütüphane için -l veya hardcoding yolu olmadan GCC kullanılarak nasıl bağlanır?

Kitaplık dosyasının yolunu doğrudan bağlantı komut satırına iletebiliyorum, ancak bu kitaplık yolunun neden olmasına neden oluyor. yürütülebilir dosyaya kodlanmış. Örneğin

:

g++ -o build/bin/myapp build/bin/_mylib.so 

yürütülebilir sabit şekilde yolunu neden olmadan bu kitaplığa bağlamak için bir yolu var mı? Eğer g ++ sonra çağrılır çalışma dizinine paylaşılan kütüphane kopyalayabilirsiniz Eğer

cevap

57

kullanabilirsiniz. Eğer _mylib.so için yolunu aramalıyız

g++ -o build/bin/myapp -l:_mylib.so other_source_files 

kullanın.

+1

Bu, efendim, tam olarak aradığım şey. Teşekkürler! – kbluck

+0

Bana çok yardımcı oldu, teşekkürler. –

+2

Bu sonuç, normalde standart sonames için olduğu gibi '_mylib.so'yu gömmek yerine' -l: 'kullanarak bağlanmış kütüphanede yerleşik 'build/bin/_mylib.so' sonucunu buluyorum. Sonuç olarak, '_mylib.so' yüklemeyi denediğinizde, bu tam yol (' ldd' gösterecektir) ve kendi başına '_mylib.so'yu bulamaz. –

2

bu çalışması gerekir: Eğer Unix veya Linux ise

g++ -o build/bin/myapp _mylib.so other_source_files 
1

Sana kütüphaneye sembolik bir bağlantı oluşturabileceğiniz düşünüyorum kütüphaneyi istediğiniz dizini. Örneğin

: ":" Eğer kütüphanelere farklı adlar vermeyi sağlayan önek
ln -s build/bin/_mylib.so build/bin/lib_mylib.so

Ardından yoktur -l_mylib

http://en.wikipedia.org/wiki/Symbolic_link

İlgili konular