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)嗎?)
主站蜘蛛池模板: 超声波焊接机,振动摩擦焊接机,激光塑料焊接机,超声波焊接模具工装-德召尼克(常州)焊接科技有限公司 | 北京开源多邦科技发展有限公司官网 | R507制冷剂,R22/R152a制冷剂厂家-浙江瀚凯制冷科技有限公司 | 减速机三参数组合探头|TSM803|壁挂式氧化锆分析仪探头-安徽鹏宸电气有限公司 | 铝箔-铝板-花纹铝板-铝型材-铝棒管-上海百亚金属材料有限公司 | 物流之家新闻网-最新物流新闻|物流资讯|物流政策|物流网-匡匡奈斯物流科技 | 瓶盖扭矩测试仪-瓶盖扭力仪-全自动扭矩仪-济南三泉中石单品站 | 等离子空气净化器_医用空气消毒机_空气净化消毒机_中央家用新风系统厂家_利安达官网 | 成都LED显示屏丨室内户外全彩led屏厂家方案报价_四川诺显科技 | 数控车床-立式加工中心-多功能机床-小型车床-山东临沂金星机床有限公司 | 1000帧高速摄像机|工业高速相机厂家|科天健光电技术 | 台湾HIWIN上银直线模组|导轨滑块|TBI滚珠丝杆丝杠-深圳汉工 | 本安接线盒-本安电路用接线盒-本安分线盒-矿用电话接线盒-JHH生产厂家-宁波龙亿电子科技有限公司 | 排烟防火阀-消防排烟风机-正压送风口-厂家-价格-哪家好-德州鑫港旺通风设备有限公司 | 阿米巴企业经营-阿米巴咨询管理-阿米巴企业培训-广东键锋企业管理咨询有限公司 | 细沙回收机-尾矿干排脱水筛设备-泥石分离机-建筑垃圾分拣机厂家-青州冠诚重工机械有限公司 | sus630/303cu不锈钢棒,440C/430F/17-4ph不锈钢研磨棒-江苏德镍金属科技有限公司 | 诚暄电子公司首页-线路板打样,pcb线路板打样加工制作厂家 | 高压微雾加湿器_工业加湿器_温室喷雾-昌润空气净化设备 | 泰国试管婴儿_泰国第三代试管婴儿费用|成功率|医院—新生代海外医疗 | 急救箱-应急箱-急救包厂家-北京红立方医疗设备有限公司 | 美缝剂_美缝剂厂家_美缝剂加盟-地老板高端瓷砖美缝剂 | 百方网-百方电气网,电工电气行业专业的B2B电子商务平台 | Trimos测长机_测高仪_TESA_mahr,WYLER水平仪,PWB对刀仪-德瑞华测量技术(苏州)有限公司 | 东莞螺杆空压机_永磁变频空压机_节能空压机_空压机工厂批发_深圳螺杆空压机_广州螺杆空压机_东莞空压机_空压机批发_东莞空压机工厂批发_东莞市文颖设备科技有限公司 | 反渗透水处理设备|工业零排放|水厂设备|软化水设备|海南净水设备--海南水处理设备厂家 | 广州展览制作|展台制作工厂|展览设计制作|展览展示制作|搭建制作公司 | 电力测功机,电涡流测功机,磁粉制动器,南通远辰曳引机测试台 | 水质传感器_水质监测站_雨量监测站_水文监测站-山东水境传感科技有限公司 | 长沙广告公司|长沙广告制作设计|长沙led灯箱招牌制作找望城湖南锦蓝广告装饰工程有限公司 | 浴室柜-浴室镜厂家-YINAISI · 意大利设计师品牌 | 咿耐斯 |-浙江台州市丰源卫浴有限公司 | 山东彩钢板房,山东彩钢活动房,临沂彩钢房-临沂市贵通钢结构工程有限公司 | 冲锋衣滑雪服厂家-冲锋衣定制工厂-滑雪服加工厂-广东睿牛户外(S-GERT) | 包装盒厂家_纸盒印刷_礼品盒定制-济南恒印包装有限公司 | 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | 风电变桨伺服驱动器-风电偏航变桨系统-深圳众城卓越科技有限公司 | 商标转让-商标注册-商标查询-软著专利服务平台 - 赣江万网 | KBX-220倾斜开关|KBW-220P/L跑偏开关|拉绳开关|DHJY-I隔爆打滑开关|溜槽堵塞开关|欠速开关|声光报警器-山东卓信有限公司 | 金属切削液-脱水防锈油-电火花机油-抗磨液压油-深圳市雨辰宏业科技发展有限公司 | 金蝶帐无忧|云代账软件|智能财税软件|会计代账公司专用软件 | 焊缝跟踪系统_激光位移传感器_激光焊缝跟踪传感器-创想智控 |