pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

如何使用 GCC 和 ld 刪除未使用的 C/C++ 符號(hào)?

How to remove unused C/C++ symbols with GCC and ld?(如何使用 GCC 和 ld 刪除未使用的 C/C++ 符號(hào)?)
本文介紹了如何使用 GCC 和 ld 刪除未使用的 C/C++ 符號(hào)?的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!

問(wèn)題描述

我需要嚴(yán)格優(yōu)化我的可執(zhí)行文件的大小(ARM 開(kāi)發(fā))并且我注意到在我當(dāng)前的構(gòu)建方案 (gcc + ld) 中未使用的符號(hào)沒(méi)有被剝離.

I need to optimize the size of my executable severely (ARM development) and I noticed that in my current build scheme (gcc + ld) unused symbols are not getting stripped.

arm-strip --strip-unneeded 用于生成的可執(zhí)行文件/庫(kù)不會(huì)改變可執(zhí)行文件的輸出大小 (我不知道為什么,也許是根本不能).

The usage of the arm-strip --strip-unneeded for the resulting executables / libraries doesn't change the output size of the executable (I have no idea why, maybe it simply can't).

如何(如果存在)修改我的構(gòu)建管道,以便從生成的文件中刪除未使用的符號(hào)?

What would be the way (if it exists) to modify my building pipeline, so that the unused symbols are stripped from the resulting file?

我什至不會(huì)想到這一點(diǎn),但我當(dāng)前的嵌入式環(huán)境不是很強(qiáng)大",而且甚至將 500K 保存在 2M 中,都會(huì)帶來(lái)非常好的加載性能提升.

I wouldn't even think of this, but my current embedded environment isn't very "powerful" and saving even 500K out of 2M results in a very nice loading performance boost.

更新:

不幸的是,我使用的當(dāng)前 gcc 版本沒(méi)有 -dead-strip 選項(xiàng)和 -ffunction-sections... + --gcld 的 -sections 對(duì)結(jié)果輸出沒(méi)有任何顯著差異.

Unfortunately the current gcc version I use doesn't have the -dead-strip option and the -ffunction-sections... + --gc-sections for ld doesn't give any significant difference for the resulting output.

我很震驚這甚至成為一個(gè)問(wèn)題,因?yàn)槲掖_信 gcc + ld 應(yīng)該自動(dòng)去除未使用的符號(hào)(為什么他們甚至必須保留它們?).

I'm shocked that this even became a problem, because I was sure that gcc + ld should automatically strip unused symbols (why do they even have to keep them?).

推薦答案

對(duì)于 GCC,這分兩個(gè)階段完成:

For GCC, this is accomplished in two stages:

首先編譯數(shù)據(jù),但告訴編譯器將代碼分成翻譯單元內(nèi)的單獨(dú)部分.這將通過(guò)使用以下兩個(gè)編譯器標(biāo)志為函數(shù)、類和外部變量完成:

First compile the data but tell the compiler to separate the code into separate sections within the translation unit. This will be done for functions, classes, and external variables by using the following two compiler flags:

-fdata-sections -ffunction-sections

使用鏈接器優(yōu)化標(biāo)志將翻譯單元鏈接在一起(這會(huì)導(dǎo)致鏈接器丟棄未引用的部分):

Link the translation units together using the linker optimization flag (this causes the linker to discard unreferenced sections):

-Wl,--gc-sections

因此,如果您有一個(gè)名為 test.cpp 的文件,其中聲明了兩個(gè)函數(shù),但其??中一個(gè)未使用,您可以使用以下 gcc(g++) 命令省略未使用的那個(gè):

So if you had one file called test.cpp that had two functions declared in it, but one of them was unused, you could omit the unused one with the following command to gcc(g++):

gcc -Os -fdata-sections -ffunction-sections test.cpp -o test -Wl,--gc-sections

(注意 -Os 是一個(gè)額外的編譯器標(biāo)志,它告訴 GCC 優(yōu)化大小)

(Note that -Os is an additional compiler flag that tells GCC to optimize for size)

這篇關(guān)于如何使用 GCC 和 ld 刪除未使用的 C/C++ 符號(hào)?的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來(lái)源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問(wèn)題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請(qǐng)聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

Algorithm to convert RGB to HSV and HSV to RGB in range 0-255 for both(將 RGB 轉(zhuǎn)換為 HSV 并將 HSV 轉(zhuǎn)換為 RGB 的算法,范圍為 0-255)
How to convert an enum type variable to a string?(如何將枚舉類型變量轉(zhuǎn)換為字符串?)
When to use inline function and when not to use it?(什么時(shí)候使用內(nèi)聯(lián)函數(shù),什么時(shí)候不使用?)
Examples of good gotos in C or C++(C 或 C++ 中好的 goto 示例)
Significance of ios_base::sync_with_stdio(false); cin.tie(NULL);(ios_base::sync_with_stdio(false) 的意義;cin.tie(NULL);)
Is TCHAR still relevant?(TCHAR 仍然相關(guān)嗎?)
主站蜘蛛池模板: 气动隔膜泵-电动隔膜泵-循环热水泵-液下排污/螺杆/管道/化工泵「厂家」浙江绿邦 | 视频直播 -摄影摄像-视频拍摄-直播分发| 三板富 | 专注于新三板的第一垂直服务平台 | 蓄电池在线监测系统|SF6在线监控泄露报警系统-武汉中电通电力设备有限公司 | 金属管浮子流量计_金属转子流量计厂家-淮安润中仪表科技有限公司 | 电解抛光加工_不锈钢电解抛光_常州安谱金属制品有限公司 | 污水处理设备维修_污水处理工程改造_机械格栅_过滤设备_气浮设备_刮吸泥机_污泥浓缩罐_污水处理设备_污水处理工程-北京龙泉新禹科技有限公司 | 异噻唑啉酮-均三嗪-三丹油-1227-中北杀菌剂厂家 | 流量卡中心-流量卡套餐查询系统_移动电信联通流量卡套餐大全 | 河南15年专业网站建设制作设计,做网站就找郑州启凡网络公司 | 环压强度试验机-拉链拉力试验机-上海倾技仪器仪表科技有限公司 | 工控机,嵌入式主板,工业主板,arm主板,图像采集卡,poe网卡,朗锐智科 | 山东led显示屏,山东led全彩显示屏,山东LED小间距屏,临沂全彩电子屏-山东亚泰视讯传媒有限公司 | 隧道烘箱_隧道烘箱生产厂家-上海冠顶专业生产烘道设备 | 超声骨密度仪-动脉硬化检测仪器-人体成分分析仪厂家/品牌/价格_南京科力悦 | 国标白水泥,高标号白水泥,白水泥厂家-淄博华雪建材有限公司 | 带压开孔_带压堵漏_带压封堵-菏泽金升管道工程有限公司 | 卫生型双针压力表-高温防腐差压表-安徽康泰电气有限公司 | 雨燕360体育免费直播_雨燕360免费NBA直播_NBA篮球高清直播无插件-雨燕360体育直播 | 台湾阳明固态继电器-奥托尼克斯光电传感器-接近开关-温控器-光纤传感器-编码器一级代理商江苏用之宜电气 | 山东柳店新能源科技有限公司 | 控显科技 - 工控一体机、工业显示器、工业平板电脑源头厂家 | 储气罐,真空罐,缓冲罐,隔膜气压罐厂家批发价格,空压机储气罐规格型号-上海申容压力容器集团有限公司 | 波纹补偿器_不锈钢波纹补偿器_巩义市润达管道设备制造有限公司 | 塑料瓶罐_食品塑料瓶_保健品塑料瓶_调味品塑料瓶–东莞市富慷塑料制品有限公司 | 校车_校车价格_19座幼儿园校车_幼儿园校车_大鼻子校车 | 长春网站建设,五合一网站设计制作,免费优化推广-长春网站建设 | IP检测-检测您的IP质量 | 清水混凝土修复_混凝土色差修复剂_混凝土色差调整剂_清水混凝土色差修复_河南天工 | 右手官网|右手工业设计|外观设计公司|工业设计公司|产品创新设计|医疗产品结构设计|EMC产品结构设计 | 武汉高低温试验箱_恒温恒湿试验箱厂家-武汉蓝锐环境科技有限公司 | 郑州墨香品牌设计公司|品牌全案VI设计公司 | 湖南印刷厂|长沙印刷公司|画册印刷|挂历印刷|台历印刷|杂志印刷-乐成印刷 | ET3000双钳形接地电阻测试仪_ZSR10A直流_SXJS-IV智能_SX-9000全自动油介质损耗测试仪-上海康登 | 安徽合肥格力空调专卖店_格力中央空调_格力空调总经销公司代理-皖格制冷设备 | 行星齿轮减速机,减速机厂家,山东减速机-淄博兴江机械制造 | 隧道风机_DWEX边墙风机_SDS射流风机-绍兴市上虞科瑞风机有限公司 | 广州冷却塔维修厂家_冷却塔修理_凉水塔风机电机填料抢修-广东康明节能空调有限公司 | 便携式XPDM露点仪-在线式防爆露点仪-增强型烟气分析仪-约克仪器 冰雕-冰雪世界-大型冰雕展制作公司-赛北冰雕官网 | 上海logo设计| 代办建筑资质升级-建筑资质延期就找上海国信启航 |