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 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.