clang:从输出中删除类名

时间:2013-01-28 10:58:07

标签: c++ clang debug-symbols clang++

我使用clang++使用以下命令行命令(拆分为行)构建了我的C ++项目:

clang++
  -std=c++11
  -W -Wall -Wextra -pedantic -Wno-newline-eof -Werror
  -O4
  -I<dirs>
  -L<dirs>
  -l<libs>
  -framework <frameworks>
  -D <defs>
  -o <filename>
  <files>

但是,当我运行strings <filename>时,尽管命令行中有-O4,但仍显示多个类名。我已经尝试了-Wl,-s,它应该告诉llvm剥离所有符号,但这并不会删除它们。

出现的类名似乎都有一个共同点:它们有一个vtable。其中一个类是:

class MyClass {
public:
    virtual void myFunc() = 0;  
};

它显示为符号:

N9namespace7MyClassE

我不喜欢我的命名空间和类名出现在最终文件中。如何剥离这些?我的二进制文件是命令行实用程序,因此只应导出main函数。


即使在提供-fno-rtti(正如@n.m。建议)之后,仍有一些名称仍然存在,例如:

__ZN15MyClassInstance6myFuncEv

(MyClassInstance是上面MyClass的子类)

此外,即使全局变量的名称也在二进制文件中。

1 个答案:

答案 0 :(得分:1)

我通过提供clang参数-fno-rtti解决了这个问题,该参数禁用了RTTI,这是我不使用的C ++特性。

[编辑]
看起来-O4并不意味着strip,并且可以通过执行strip删除对我的类名称的最后几个引用。