加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何使用c 11为旧Linux版本构建二进制文件?

发布时间:2020-12-16 07:07:23 所属栏目:百科 来源:网络整理
导读:我们已经开始使用跨平台构建工具tundra2在不同平台上构建我们的应用程序二进制文件.它工作得很好. 但是,现在我们需要针对Ubuntu 10.04.不幸的是,如果没有对源代码进行大量的返工,将tundra2编译到Ubuntu 10.04是不可能的,因为它使用了gcc 4.4中没有的许多c 11
我们已经开始使用跨平台构建工具tundra2在不同平台上构建我们的应用程序二进制文件.它工作得很好.

但是,现在我们需要针对Ubuntu 10.04.不幸的是,如果没有对源代码进行大量的返工,将tundra2编译到Ubuntu 10.04是不可能的,因为它使用了gcc 4.4中没有的许多c 11特性.我能够升级到更新的gcc但不能升级到能够编译代码的gcc.

所以我想我会尝试在更新的平台上构建tundra2并将tundra2二进制文件复制到10.04.不幸的是我收到这些错误:

(lucid_amd64)matt@blaze:~/dev/OTOY2/extern/tundra2/build$./tundra2 
./tundra2: /lib/libc.so.6: version `GLIBC_2.14' not found (required by ./tundra2)
./tundra2: /lib/libc.so.6: version `GLIBC_2.15' not found (required by ./tundra2)

我尝试使用-static-libstdc和-static-libgcc选项静态链接g,但错误仍然存??在.

提出了这个问题.如何使用较新的编译器功能来定位旧平台?
我应该尝试在Ubuntu 10.04上编译GCC 4.8吗?

经过一些阅读和学习更多关于gnu c链接器的知识,我认为我需要知道.似乎导致依赖的函数是在2.15中引入的一个名为__fdelt_chk的函数.
与范围检查有关.我将尝试关闭它或为它实现一个假人. memcpy也想要2.14,这在Ubuntu 10.04上是不可用的.

编辑.
似乎2.14和2.15中引入了两个常见的变化.
在2.14中,我已经读过memcpy已被更新为内部成为memmove调用.
在2.15中,引入了内存边界检查(这就是__fdelt_chk).

相反,如果C运行时静态链接,则二进制文件无法在10.04和Centos 5.5上运行.

那么我们如何处理这些呢?我已经尝试了memcpy包装,但由于某种原因这不起作用.它仍然试图寻找2.14.并且在编译和链接行的末尾放置-fno-stack-protector和-U_FORTIFY_SOURCE并没有实际删除它.我也链接到像pthreads这样的其他库,所以我不知道是否需要它.

看起来寻找这个问题的解决方案实际上非常普遍,并且没有显示通用的解决方案.我想我会尝试在10.04上编译gcc 4.8并看看票价是多少.

解决方法

compiling tundra2 onto Ubuntu 10.04 is not possible without significant rework of the source code

从源安装最新和最好的gcc版本.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读