小编rhi*_*man的帖子

GCC/G ++:为没有旧Linux内核的GNU唯一对象符号构建

我目前正在为大量代码更新构建系统,这恰好包括一个Linux C++项目.如果这里的所有开发人员都可以在使用他们自己的想法进行攻击时运行构建会很好,所以我正在研究是否有可能在模糊的现代Linux系统上构建它,尽管目标系统是2.6.18.

通过'模糊的现代'我估计像GCC 4.5+这样的东西,过去一两年的分布可能会附带.目前我通过静态编译来解决libstdc ++问题,并且通过使用快速的包装代码重新映射到旧版本的memcpy符号(等等),可以巧妙地解决任何glibc问题.到现在为止还挺好.

我似乎无法完全弄清楚的一个问题是,.o文件中可执行文件中内置的某些符号是'u'类型,它是一个GNU唯一对象,是2.6.18不能用于ELF标准的扩展似乎根本没有认识到.这意味着可执行文件不能运行,因为它无法找到符号,尽管它们实际上存在(目标上的类型为'?',来自'nm').

在编译G ++时,可以禁用GNU唯一对象,但这并不是最方便的解决方案.在编译代码时我看不到任何方法来禁用它(发行版gcc/g ++总是有这个选项),我想目标系统识别它的唯一方法就是更新ld-linux和内核.这几乎肯定不会发生.

有没有找到禁用这些符号类型的选项?或许也有一些巧妙的方法,或者我缺少的东西?我开始怀疑它只需要在G ++ 4.1.x上编译,这将意味着从源代码开始的旧Linux安装或构建.

linux gcc

6
推荐指数
1
解决办法
2024
查看次数

标签 统计

gcc ×1

linux ×1