首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在CentOS 7的CentOS 8上编译

在CentOS 7的CentOS 8上编译
EN

Stack Overflow用户
提问于 2021-09-07 03:42:37
回答 1查看 244关注 0票数 0

我正在开发一个可以在CentOS 8和CentOS 7系统上运行的程序。在其中,我使用gethostbyname将DNS名称解析为IP地址。

为了尝试使代码可移植,我使用以下命令进行编译:

代码语言:javascript
复制
g++ -static stats-agent.cpp -o stats-agent

当它编译时,我得到以下内容:

代码语言:javascript
复制
/tmp/ccVDW5ph.o: In function `main':
stats-agent.cpp:(.text+0x45c): warning: Using 'gethostbyname' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking

现在,当我将二进制文件移到CentOS 7系统上并尝试运行它时,我得到了以下结果:

代码语言:javascript
复制
stats-agent: dl-call-libc-early-init.c:37: _dl_call_libc_early_init: Assertion `sym != NULL' failed.
Aborted

我已经检查了glibc、glib-devel和glibc-static。我唯一注意到的是CentOS 8上的glibc版本是2.28,而CentOS7上的版本是2.17。会不会是它造成的呢?我是否必须编译单独的CentOS 7和CentOS 8二进制文件?我正在试着让它变得便携。

EN

回答 1

Stack Overflow用户

发布于 2021-09-07 04:32:26

为了尝试使代码可移植,我使用以下命令进行编译

与流行的想法相反,全静态Linux二进制文件的可移植性较差--只有在运行时安装的GLIBC版本与构建期间使用的版本完全相同时,才能保证正常工作。另请参见this answer

会不会是

导致的呢?

我是否必须编译单独的CentOS 7和CentOS 8二进制文件?

只有在你坚持使用全静态链接的情况下。

您可以在CentOS 7上(或者在chroot中,或者在docker容器中,或者在VM中)使用动态libc.so.6构建二进制文件,它在CentOS 8上也可以很好地工作。

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

https://stackoverflow.com/questions/69082168

复制
相关文章

相似问题

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