2009-04-27 24 views
7

en Linux con las herramientas GNU, sé cómo controlar símbolos exportados de una biblioteca compartida con un guión versión (-Wl gcc, - version-script = symbols.map), pero me gustaría enumerar símbolos exportados en el línea de comando en su lugar. IOW, me gustaría el equivalente deenlazador GNU: alternativa a --version-secuencia de comandos para enumerar los símbolos exportados en la línea de comandos?

link /EXPORT:foo 

de la herramienta MS toolchain. Es posible ?

EDIT:

Mi pregunta no puede ser muy clearn: si tengo un libfoo.so biblioteca, y quiero sólo bibliotecas de exportación foo1 y foo2, puedo ir a crear un guión foo.linux versión de la siguiente

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

Y NO

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

me gustaría ser capaz de hacer algo como esto en su lugar:

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

Respuesta

3

No estoy seguro de que usted puede hacer esto como usted desea. Una forma es con el guión versión enlazador como se ha mencionado. Otra forma es agregar su código fuente __attribute__ ((visibility("default"))) para lo que desee exportar y compilar todo con -fvisibility=hidden

+0

Sí, parece que haciendo lo que quiero simplemente no es posible en este momento. Usar atributo es exactamente lo que quiero evitar –

-1

readelf y objdump tiene un montón de opciones. ¿Qué tal:

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

Puede que tenga ocho años de retraso, pero sí, puede hacer lo que quiera.

Uso Bash process substitution:

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