链接器是否可以报告未使用的成员函数?(C++)(GCC)

Tre*_*key 6 c++ optimization linker gcc member-functions

std :: string有30多个可以在字符串对象上调用的成员函数.
如果我只使用其中一些怎么办?

我假设未使用的成员函数不会占用可执行代码部分中的空间.
我很想知道链接器是否有可能确定一个未使用的成员函数,将其从编译后的二进制文件中删除,并报告它丢弃了哪些函数.
有没有办法做到这一点?我在看gcc的链接器标志,但我找不到任何相关的东西.

Flo*_*ade 4

由于std::string是一个模板类(std::string只是一个typedefto std::basic_string<char>),因此只有使用的方法才会被实例化,因此不会编译任何未使用的方法,因此它们无法从可执行文件中删除。

关于非模板类:virtual函数总是以可执行文件结束,无论它们是否被调用,因为 vtable 需要地址。来自可执行文件或静态链接库源的其他方法(以及自由函数)只有在实际使用时才会链接到二进制文件中。但我知道没有链接器标志来打印尚未链接的函数。

另一方面,共享库 (.so) 必须包含所有(导出的)函数和方法,因为使用此共享库的二进制文件可以使用任何(导出的)函数。但由于共享库可以被许多可执行文件使用,而仅加载到内存中一次,因此这通常是值得的。