LINUX.ORG.RU

binutils: как разэкспортировать символ?


0

0
Допустим пишется библиотека. Если она вся в одной единице трансляции, то просто неэкспортируемые функции объявляются static

Но нужно разбить на несколько единиц. И при этом получается что экспортируются некоторые символы, которые не должны. Как их можно загасить?

★★★★★
Если я правильно понимаю - никак. К сожалению.
Teak ★★★★★
()
Может попробовать создать что-то подобное namespace ?
anonymous
()
$ cat xixi.c
int mama() {}
int papa() {}

$ gcc -c xixi.c
$ objcopy -L papa xixi.o xaxa.o
$ $ nm xaxa.o
00000000 T mama
00000005 t papa
$ gcc -o main main.c xaxa.o
/tmp/ccSas7Xk.o(.text+0x1d): In function `main':
: undefined reference to `papa'

Решение:
1. Рассыпать библиотеку
2. Собрать с -r модули, которые д.б. связаны скрываемым символом
3. Скрыть символ
4. Пересобрать библиотку

io ★★
()
Способ должен быть... Думаю, их можно загасить в скриптах линкера. Средствами Си этого не сделаешь AFAIK.
tailgunner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.