c++ - 我该如何剥离符号表?

标签 c++ shared-libraries

我用了strip MAC下的命令删除符号表。
然后我将使用 strings 进行检查和 grep命令。
然后我发现即使是类私有(private)函数名也可以是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

如何剥离类中的公共(public)和私有(private)函数名称?

最佳答案

因为有.so在你的输出中,我假设你在 Linux 上做所有这些?如果是,你需要做两件事。

  • 修改您的构建脚本/制作文件/cmake 列表/您使用的任何构建环境,添加以下编译器开关:-fvisibility=hidden -fvisibility-inlines-hidden您很可能会丢失导出的符号,请在源代码中使用 __attribute__((visibility("default"))) 单独标记它们.
  • 使用 strip操作系统附带的二进制文件。
  • 关于c++ - 我该如何剥离符号表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63790055/

    相关文章:

    c++ - 编译类型模板谓词使用 Clang 进行编译,但不使用 GCC 或 MSVC

    linux - 如何设置 DT_RPATH 或 DT_RUNPATH?

    使用共享库时 C++ 代码未定义对函数的引用

    cocoa - .so 运行时可链接库作为插件; cocoa 能力?

    pointers - 如何创建一个红色/系统绑定(bind)到一个函数,该函数需要一个指向指针的指针?

    c++ - 没有信号处理程序的 POSIX 计时器的用途是什么?

    C++ createObject() 工厂

    c++ - 在 C++ 数组中找到中位数(双)?

    c++ - 使用 OpenCL 加速 Tesseract

    javascript - 在 mongod 启动时加载 JavaScript 共享库