GNU linker: альтернатива --version-script для отображения экспортируемых символов в командной строке? - PullRequest
9 голосов
/ 27 апреля 2009

В Linux с помощью цепочки инструментов GNU я знаю, как управлять экспортированными символами из общей библиотеки с помощью скрипта версии (gcc -Wl, - version-script = symbols.map), но я хотел бы перечислить экспортируемые символы вместо командной строки. Я хотел бы получить эквивалент

link /EXPORT:foo 

из набора инструментов MS. Возможно ли это?

EDIT:

Мой вопрос может быть не очень понятным: если у меня есть библиотека libfoo.so, и я хочу экспортировать только библиотеки foo1 и foo2, я могу создать скрипт версии foo.linux следующим образом

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

И сделать

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

Я бы хотел сделать что-то вроде этого:

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

Ответы [ 3 ]

3 голосов
/ 12 мая 2010

Я не уверен, что вы можете делать это так, как хотите. Один способ - использовать скрипт версии компоновщика, как вы упомянули. Другой способ - добавить в исходный код __attribute__ ((visibility("default"))) для экспортируемого файла и скомпилировать все с помощью -fvisibility=hidden

.
1 голос
/ 26 января 2018

Я могу опоздать на восемь лет, но да, вы действительно можете делать то, что хотите.

Использовать Bash процесс подстановки :

gcc -shared foo.c -Wl,--version-script=<(echo "{global:foo1;foo2;local:*;};") -o libfoo.so -soname libfoo.so
0 голосов
/ 27 апреля 2009

readelf и objdump имеют много опций. Как насчет:

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