- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要从一个大型 C++ 项目中删除未使用的函数。阅读一段时间后,我使用了这个链接:How can I know which parts in the code are never used?
我使用 makefile 在 RedHat 上编译。我向编译器添加了标志:
-Wall -Wconversion -ffunction-sections -fdata-sections
和链接器的标志:
-Wl,-rpath,--demangle,--gc-sections,--print-gc-sections
由于某些烦人的原因,即使在使用 --demangle 选项后,我也会在 mangling 后收到输出。例如:
/usr/bin/ld:删除文件“CMakeFiles/oded.dir/oded.cpp.o”中未使用的部分“.text._ZN8TRACABLED0Ev”
/usr/bin/ld:删除文件“CMakeFiles/oded.dir/oded.cpp.o”中未使用的部分“.text._ZN8TRACABLED1Ev”
所以我有 6000 个函数名称需要整理,我不能使用 extern C
。
我可以编写一个脚本来解析它并使用 c++filt,但我正在寻找一种解决方案,让链接器自行分解函数!
有人知道这样的解决方案是否存在吗?
最佳答案
For some annoying reason I receive the output after mangling even after using --demangle option
来自 man ld
:
--demangle[=style]
--no-demangle
These options control whether to demangle symbol names in
error messages and other output.
但是这些消息:
Removing unused section '.text._ZN8TRACABLED0Ev' in file
不关于符号名称。它们是关于部分 的名称,有时 恰好包含符号名称。所以这是按记录工作的。
现在,如果您真的想对此做点什么,您可以开发一个链接器补丁来分解部分名称,并将其发送给 GNU binutils 维护者。
但一个更简单的选择可能是通过 c++filt
简单地通过管道传输您想要分解的消息。例如:
echo "Removing unused section '.text._ZN8TRACABLED0Ev' in file" |
sed -e 's/_ZN/ _ZN/' | c++filt
产生:
Removing unused section '.text. TRACABLE::~TRACABLE()' in file
关于c++ - 在没有 c++filt 的情况下解析名称重整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30295510/
对不起,如果这很愚蠢,但我对此感到困惑。 我做了Google我的问题,但找不到任何相关结果。 对于以下代码编译并写入 a.out : char x; cout<
有谁知道c++filt源代码的链接。我想在我的代码中调用 c++filt 作为库。 最佳答案 在 Linux 上,您可以使用 /usr/include/demangle.h ,它是 binutils-
我正在通过 c++filt 过滤我编译的 PTX,但它只删除了一些名称/标签并保留了一些原样。例如,这个: func (.param .b32 func_retval0) _ZN41_INTERNA
我需要从一个大型 C++ 项目中删除未使用的函数。阅读一段时间后,我使用了这个链接:How can I know which parts in the code are never used? 我使用
在我的开发环境中,我正在使用 GNU C++ 3.4.6 编译代码库。代码正在开发中,不幸的是时不时会崩溃。很高兴能够通过 demangler 运行回溯,我使用 c++filt 3.4。当函数有许多
我刚刚跑了c++filt当我有一个重复的符号错误时进行解码: $ c++filt __ZN4uiuclsERNSt3__113basic_ostreamIcNS0_11char_traitsIcEEE
在我的 linux 上,我有一个 .cpp 文件 void f(){} struct C{void f(){}}; 我编译了它并把二进制文件串起来,尝试去破坏函数名: $c++filt __Z1gv
我在 GCC C++ 编译器上运行代码,以输出 type_info::name: #include #include using namespace std; class shape { p
我正在尝试将 demangler 与 llvm-cov 报告工具结合使用。以下是我正在运行的命令: llvm-cov report /path/to/executable -instr-profile
我只是想学习c++filt,网络上没有足够的示例用法.... 我正在编写一个 main.cpp 文件并尝试读取机器代码.... g++ -S main.cpp -> gives me main.s 如
我遇到了一个问题,我不确定这是 kqueue 的预期行为还是我做错了什么。 我需要使用 kqueue 为单个套接字文件描述符安装单独的事件。单独的事件是 (sockfd,EVFILT_READ) 和
我是一名优秀的程序员,十分优秀!