У меня есть небольшая статическая библиотека, скомпилированная (linux) gcc 4.8.2 с -fvisibility=hidden, которая связана с общей библиотекой (у меня есть две версии: gcc с кодом C и ifort с кодом Fortran). Статическая библиотека состоит из некоторых внутренних функций с префиксом "ST_LIB_".
Я хочу быть уверен, что функции, объявленные в статической библиотеке, не могут использоваться никаким исполняемым файлом/библиотекой, связанной с общей библиотекой. Какая команда в Linux лучше всего проверяет, что функции с некоторым префиксом не могут использоваться какой-либо внешней библиотекой?
Я пытался:
nm --dynamic shared_lib | grep -i "ST_LIB_" | wc -l
(выход 0)
readelf -d shared_lib | grep -i "ST_LIB_" | wc -l
(выход 0)
nm -g shared_lib | grep -i "ST_LIB_" | wc -l
(выводит 26 или 0 в зависимости от общей библиотеки)
readelf -s shared_lib | grep -i "ST_LIB_" | wc -l
(выводит 26 или 0 в зависимости от общей библиотеки)
readelf -Ws shared_lib | grep -i "ST_LIB_" | grep -i "HIDDEN" | wc -l
(выводит 26 или 0 в зависимости от общей библиотеки)
nm -g
дает вам 26 результатов?-g
(или--extern-only
) должен давать вам только внешне видимые символы (именно то, что вы просите). Так что, вероятно, у вас есть 26ST_LIB_*
функций, которые не являются статическими. - person Shahbaz   schedule 11.03.2014static
языка C. Если функция статическая, она должна быть внешне невидима для компоновщика. Если gcc правильно сообщает вам, что внешних видимых функций нет (с префиксомST_LIB_
), но компоновщик ifort делает эти функции видимыми извне, то, возможно, что-то не так с ifort или что-то не так с тем, как вы его называете. - person Shahbaz   schedule 11.03.2014