首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在gcc中取消定义链接器符号

在gcc中取消定义链接器符号
EN

Stack Overflow用户
提问于 2011-03-16 21:00:32
回答 2查看 2.1K关注 0票数 0

我们有一个在嵌入式oOS上运行的程序。我们通常在输出二进制文件中嵌入一个版本字符串,它可以识别生成二进制文件时包含的所有版本。通常,我们使用的编译器可以通过创建一个“未定义的”符号来确保版本字符串在二进制文件中,然后由我们的版本字符串进行解析。

但是,我们现在已经转移到基于Linux的系统和gcc。

gcc正在从最终的可执行文件中删除版本字符串。最终的exe是通过链接在一堆库中创建的。每个库都嵌入了一个版本字符串。

gcc正在删除版本字符串,因为没有任何内容引用该字符串,而我们已经打开了-Os优化。

有没有办法确保gcc不会剥离字符串的集合(我们需要嵌入大约5-10个版本的字符串)?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-17 16:35:22

好的,为了解决这个问题,我们在一个c文件中这样做:

代码语言:javascript
复制
const char _string_[] = "some string";

然后在最终链接中包含目标文件:

代码语言:javascript
复制
gcc <snip> -Wl,--start-group string.o <snip> -Wl,--end-group -Wl,--strip-all -o final.exe
票数 2
EN

Stack Overflow用户

发布于 2011-03-16 21:08:11

尝试使用--retain-symbols-file (链接器的选项)

ld mangpage

-- Retain - symbols -file filename仅保留文件文件名中列出的符号,丢弃所有其他符号。filename只是一个平面文件,每行只有一个符号名称。此选项在逐渐累积大型全局符号表的环境(如VxWorks)中特别有用,可节省运行时内存。

--retain- symbols -file不会丢弃未定义的符号或重定位所需的符号。

您只能在命令行中指定--retain-symbols-file一次。它覆盖了-S和-s。

我刚刚注意到上面引用的文档的最后一行。它会覆盖“全部剥离”选项,所以我不确定这是否会对你有帮助...

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5325624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档