Как скрыть имя экспортированного символа в общей библиотеке

Для VC я могу написать файл DEF и использовать директиву 'NONAME', чтобы оставить только порядковый номер в таблице экспорта dll.

Как я могу сделать то же самое с разделяемой библиотекой форматов gcc и ELF?

Или есть что-то эквивалентное в разделяемой библиотеке ELF, например, порядковый номер в DLL формате PE? Если нет, то как я могу скрыть имя экспортированного символа в общей библиотеке?

=====================================

ОБНОВЛЕНИЕ: Некоторые дополнительные описания:

В Windows вы можете экспортировать функцию, поместив только целочисленный идентификатор (порядковый номер) с пустым именем.

Чтобы показать это, обычный макет для таблицы экспорта dll выглядит следующим образом: http://home.hiwaay.net/~georgech/WhitePapers/Exporting/HowTo22.gif.

"NONAME" выглядит так: http://home.hiwaay.net/~georgech/WhitePapers/Exporting/HowTo23.gif.

Обратите внимание, что на втором изображении название функции «Н/Д». Вот полное объяснение этого: hxxp://home.hiwaay.net/~georgech/WhitePapers/Exporting/Exp.htm.

=====================================

ОБНОВЛЕНИЕ: A большое спасибо всем, кто дает мне советы. Наконец, я решил продолжать использовать статическую библиотеку на платформах linux/posix. Но извлеките небольшую «особую часть» (которая использует некоторые функции, не подходящие для статической библиотеки, например, слот TLS и т. д.) в обычную общую библиотеку. Поскольку небольшая обычная общая библиотека делает лишь несколько вещей, и эта работа совершенно нечувствительна, поэтому нет необходимости скрывать/скрывать свои API.

Думаю, это самый простой способ решить мою проблему :-D

13
задан ASBai 11 March 2012 в 08:42
поделиться