2016-03-04 5 views
3

say У меня есть приложение, которое динамически связывается с firstlib.so, а firstlib.so ссылки на secondlib.so, будет ли мое приложение также видеть символы/функции secondlib.so? Если да, то как я могу это предотвратить (я хочу, чтобы люди не смешивали символы и функции)?Символьная видимость косвенно связанных библиотек

+0

Помогло ли использование пространств имен? –

ответ

0

Да, в вашем приложении будут отображаться символы от secondlib.so.

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

Возможно, вы захотите использовать dlopen с RTLD_LOCAL, чтобы предотвратить это, но учтите, что это может иметь некоторые последствия для кода.

Один из таких эффектов, с которыми я столкнулся в прошлом, заключается в том, что dynamic_cast может не работать при определенных обстоятельствах.