如何使用c 11为旧Linux版本构建二进制文件?
我们已经开始使用跨平台构建工具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,但错误仍然存??在. 提出了这个问题.如何使用较新的编译器功能来定位旧平台? 经过一些阅读和学习更多关于gnu c链接器的知识,我认为我需要知道.似乎导致依赖的函数是在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并看看票价是多少. 解决方法
从源安装最新和最好的gcc版本. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |