views:

920

answers:

2

On Linux with the GNU toolchain, I know how to control exported symbols from a shared library with a version script (gcc -Wl,--version-script=symbols.map), but I would like to list exported symbols on the command line instead. IOW, I would like the equivalent of

link /EXPORT:foo

from the MS toolchain. Is it possible ?

EDIT:

My question may not be very clearn: if I have a library libfoo.so, and I want to only export libraries foo1 and foo2, I can go create a version script foo.linux as follows

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

And do

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

I would like to be able to do something like this instead:

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

readelf and objdump have lots of options. How about:

readelf --symbols --use-dynamic $yourlib.so
pixelbeat
+1  A: 

I'm not sure that you can do this like you want. One way is with the linker version script like you mentioned. Another way is to add in your source code attribute ((visibility("default"))) for whatever you want exported and compile everything with -fvisibility=hidden

Unknown
Yep, it seems that doing what I want is simply not possible at the moment. Using attribute is exactly what I want to avoid
David Cournapeau