我正在编写一些代码,这些代码将用于嵌入式设备,所以我希望通过让链接器丢弃我不使用的第三方库函数来减小代码大小。我尝试了使用
这是我用MinGW构建的一个示例:
这是命令行输出:
现在,如果我完全注释掉
我原本以为未使用的函数会被丢弃,因此文本大小不变,但显然情况并非如此。我是否遗漏了某个命令行选项或是我对GCC内部运作的无知所致?
这只是一个示例,用来展示我的问题。我正在使用一些第三方库进行各种功能,并且我的目标是确保将我不使用的库部分从代码中删除。
-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内部运作的无知所致?
这只是一个示例,用来展示我的问题。我正在使用一些第三方库进行各种功能,并且我的目标是确保将我不使用的库部分从代码中删除。
static
可以解决这个问题,但如果我要包括第三方库,我不想一直去修改它们里面的所有内容。那我只需要将我使用的所有库都放进一个命名空间里吗? - CodingHero