2009-04-27 22 views
7

Linux üzerinde GNU toolchain ile, bir dışa aktarılmış sembollerin bir sürüm komut dosyasıyla (gcc -Wl, - version-script = symbols.map) paylaşılan bir kitaplıktan nasıl denetleneceğini biliyorum, ancak dışa aktarılan sembolleri listeye eklemek istiyorum. bunun yerine komut satırı. IOW, MS takım zincirindekiGNU linker: komut satırında dışa aktarılan sembolleri listelemek için --version-script'e alternatif mi?

eşdeğerini istiyorum. Mümkün mü ?

DÜZENLEME:

Sorum çok clearn olmayabilir: Bir kütüphane dosyaları libfilanca.so var ve yalnızca aşağıdaki şekilde ihracat kütüphaneleri foo1 ve foo2, bir versiyon komut foo.linux oluşturmak gidebilir istiyorsanız

libfoo.so 
{ 
global: 
    foo1; 
    foo2; 
local: 
    *; 
} 

Ve

gcc -shared foo.c -Wl,--version-script=foo.linux -o libfoo.so -soname libfoo.so 

yerine böyle bir şey yapmak mümkün istiyorum do:

gcc -shared foo.c -Wl,--export-symbol=foo1 -Wl,--export-symbol=foo2 -o libfoo.so -soname libfoo.so 

cevap

3

İstediğiniz gibi yapabileceğinizden emin değilim. Tek yol, belirttiğiniz gibi linker sürüm betiğidir. Başka bir yol ise, kaynak kodunu __attribute__ ((visibility("default")))'a dışa aktarmak istediğiniz her şey için eklemek ve her şeyi

+0

Yep, istediğim eylemde şu anda sadece mümkün değil gibi görünüyor. Özniteliği kullanmak tam olarak kaçınmak istediğim şeydir –

-1

readelf ve objdump birçok seçeneğe sahiptir. Ne hakkında:

readelf --symbols --use-dynamic $yourlib.so 
0

ile derlemektir. Evet, sekiz yıl gecikmiş olabilirim, ama evet, aslında istediğinizi yapabilirsiniz.

Kullanım Bash process substitution:

gcc -shared foo.c -Wl,--version-script=<(echo "{global:foo1;foo2;local:*;};") -o libfoo.so -soname libfoo.so 
İlgili konular