gpt4 book ai didi

c++ - GCC 不会删除未使用的函数

转载 作者:太空狗 更新时间:2023-10-29 23:14:13 33 4
gpt4 key购买 nike

我正在编写一些将在嵌入式设备上使用的代码,因此我想通过让链接器丢弃一些我未使用的第三方库函数来减少代码大小。我尝试使用 -ffunction-sections-fdata-sections 选项以及 -Wl,--gc-sections 但未使用的功能留下来。

这是我用 MinGW 构建的示例:

#include <iostream>
using namespace std;

double unused_function(int a, int b)
{
double r;

r = (double)a + (1.0/ (double)b);

return r;
}

double used_function(int a, int b)
{
double r;

r = (double)a + (1.0/ (double)b);
cout << r << "is the value" << endl;

return r;
}

int main() {
cout << "!!!Hello World!!!" << endl;

used_function(4,5);
return 0;
}

这是命令行输出:

g++ -O1 -ffunction-sections -fdata-sections -g -Wall -c -fmessage-length=0 -o "src\\test.o" "..\\src\\test.cpp" 
g++ -Wl,--gc-sections,-Map=output.map,--print-gc-sections -o test.exe "src\\test.o"
size --format=berkeley test.exe
text data bss dec hex filename
36424 2476 2608 41508 a224 test.exe

现在,如果我完全注释掉 unused_function() 并重新构建,size 命令会报告:

text    data     bss     dec     hex filename
36388 2476 2608 41472 a200 test.exe

我原以为未使用的函数会被丢弃,因此文本大小会保持不变,但显然不是这样。是否有我遗漏的命令行选项,或者这是我对 GCC 内部工作方式的无知?

这只是一个演示我的问题的例子。我正在为各种功能使用一些第三方库,我的目标是确保从代码中删除我使用的部分库。

最佳答案

稍后将链接的库可能需要未使用的函数。一个示例是不想限制用户如何管理内存的库公开的内存分配接口(interface)。

我们希望链接器在优化步骤中删除这些(尽管我遇到了链接器无法删除此类调用的所有残余的相关问题)

关于c++ - GCC 不会删除未使用的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34619344/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com