我有一个由 (linux) gcc 4.8.2 编译的带有 -fvisibility=hidden 的小型静态库,它链接到一个共享库(我有两个版本,一个带有 C 代码的 gcc 和一个带有 Fortran 代码的 ifort)。静态库由一些内部函数组成,所有函数都以“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 取决于共享库)