Добрый день, Сообщество!
Поднимаю снова эту тему ввиду поступления новых данных.
so на линукс действительно экспортирует почти все символы, а не только те которые были явно указаны(как это делается в windows), но с некоторых пор это так только поумолчанию.
чем это плохо
1. долгая загрузка библиотек
2. наличие эфекта схлопывания символов если в двух подгружаемых библиотеках сопадают декорированные имена символов, что приводит к весьма сложно уловимым ошибкам
в gcc 4.0 и старше и в 3.4 после применения патча
эту ситуацию можно изменить
для запрета экспорта всех символов кроме заданных можно импользовать несколько подходов
1. ключи компиляции -fvisibility=hidden -fvisibility-inlines-hidden
2. прагма #pragma GCC visibility push(hidden)
3. __attribute__ ((visibility("hidden")))
Более подробно можно прочитать тут:
http://gcc.gnu.org/wiki/Visibilityhttp://readlist.com/lists/gcc.gnu.org/gcc/0/2926.htmlhttp://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html#Function-Attributeshttp://www.nedprod.com/programs/gccvisibility.htmlman gcc и там ишим описание ключей
проверял на тестовом приложении загружающим две SO с совпадающими символами
по дефолту были колизии символов так например вторая библиотека использовала переменные не помеченные как static из первой библиотеки
после запрета экспорта этой переменной ошибка пропала
+
вот тут:
http://people.redhat.com/drepper/goodpractice.pdfесть рекомендации по созданию shared библиотек