问题描述
我在MAC下使用了strip
命令来删除符号表。
然后,我将使用strings
和grep
命令进行检查。
然后,我发现甚至类私有函数名称也可以是grep
。
class ModuleBarn
{
public:
/***/
private:
void m_Link( FunctionSet* fs,const char* functionName );
Field* m_FindField( Function* fun,uint32_t argIdx );
Function* m_FindCall( const char* functionName,const char* moduleName );
}
alldeMac-mini:~ all$ strip libBootloader.so
alldeMac-mini:~ all$ strings libBootloader.so | grep m_Link
_ZN10ModuleBarn6m_LinkEPNS_11FunctionSetEPKc
解决方法
因为您的输出中有.so
,所以我假设您正在Linux上进行所有操作?如果是,那么您需要做两件事。
-
修改构建脚本/ make文件/ cmake列表/您使用的所有构建环境都添加以下编译器开关:
-fvisibility=hidden -fvisibility-inlines-hidden
很可能会丢失导出的符号,在源代码中用{分别标记它们{1}}。 -
使用操作系统随附的
__attribute__((visibility("default")))
二进制文件。