我目前正在更新构建系统一大堆的代码,这恰好包括一个Linux C++项目。如果这里的所有开发人员都可以在构建自己的想法时进行构建,那么我会考虑是否可以在隐约现代的Linux系统上构建这个系统,尽管目标系统是2.6.18。GCC/G ++:没有GNU唯一对象符号建设老版本的Linux内核
通过“隐约现代”我估计像GCC 4.5+的东西,在过去的一年或两年分布可能配。目前,我通过静态编译来解决libstdC++问题,并且任何glibc问题都可以通过重新映射到旧版本的memcpy符号(等等)和快速包装代码来巧妙地解决。到现在为止还挺好。
我似乎无法完全弄清楚的一个问题是,从.o文件构建到可执行文件中的某些符号的类型为'u',它是GNU独特的对象,是ELF标准的扩展2.6.18似乎完全不承认。这意味着可执行文件不会运行,因为它找不到符号,尽管它们实际上存在(只是'nm'中目标'?'的类型)。编译g当
人们可以禁止使用GNU唯一对象++,但它并不完全是最方便的解决方案。编译代码时,我看不到任何方法禁用它(distro gcc/g ++总是有这个选项),我想想让目标系统识别它的唯一方法是更新ld-linux和内核。这几乎肯定不会发生。
有没有我还没有发现禁用这些符号类型的选项?或者也许有一些干净利落的方式,或者我错过了什么?我开始怀疑它只能在G ++ 4.1.x上编译,这将意味着一个旧的Linux安装或源代码编译。
如果这是一个动态链接符号类型,那么动态链接器应该存在问题,而不是内核。这与内核有什么关系? – Hibou57 2013-04-18 02:09:52
虽然我还没有尝试过,但我认为在不更改内核的情况下更改libld会非常困难 - 如果可能的话。所以它与内核没有直接关系,但更多的是我必须重新编译内核,或者只是升级整个操作系统以让链接器识别这些其他符号,据我所知。 – rhickman 2013-04-25 11:59:48