C++ 我的c++;实际使用的可执行文件

C++ 我的c++;实际使用的可执行文件,c++,g++,C++,G++,我有一个用g++编译的可执行文件,它链接了大约50个静态库(在一堆系统库之上)。我想知道这些库中正在使用哪些方法,或者更重要的是,哪些方法永远不会被调用 是否有工具和/或编译器标志可以提供此功能?您可以在Linux\UNIX中使用nm工具(至少在使用-g编译时) 因为您使用的是静态libs,所以只有库中引用的方法才会添加到可执行文件中 用法如下: nm <your executable with debug info> 我不确定你的确切意思,但是如果你想得到没有被引用的函数,有一些

我有一个用g++编译的可执行文件,它链接了大约50个静态库(在一堆系统库之上)。我想知道这些库中正在使用哪些方法,或者更重要的是,哪些方法永远不会被调用


是否有工具和/或编译器标志可以提供此功能?

您可以在Linux\UNIX中使用
nm
工具(至少在使用-g编译时)

因为您使用的是静态libs,所以只有库中引用的方法才会添加到可执行文件中

用法如下:

nm <your executable with debug info>

我不确定你的确切意思,但是如果你想得到没有被引用的函数,有一些编译器选项

-f功能部分 将告诉编译器将每个函数放入obj文件中自己的部分

然后在链接时--gc sections和--print gc sections将对未使用的节(函数)进行垃圾收集,并列出结果


您可能希望构建所有静态库以获得一个完整的列表。

Dependency Walker
除了用于链接DLL之外,还可以满足您的需要。我怀疑对于静态链接的LIB是否有同样的方法,但我可能错了。您可以使用
valgrind
callgrind
来获取应用程序中实际使用的函数和lib的调用图以及某些特定的控制流。要查看应用程序的动态链接依赖项,请使用
ldd
@DanielSaska:dep walker何时开始处理ELF可执行文件?;)刚刚发现:如果你能重新编译libs,也许可以帮助你。这是一个很好的工具,也是“哪些方法永远不会被调用”的一部分——这个问题相当于停止问题,所以不是。
man nm