首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在已安装的系统旁边安装最新的glibc (Version2.29)并编译程序?

如何在已安装的系统旁边安装最新的glibc (Version2.29)并编译程序?
EN

Stack Overflow用户
提问于 2019-02-12 16:29:06
回答 2查看 7K关注 0票数 2

基于这个堆栈过流链接,我在Linux的"/usr/local/glibc“路径中下载和安装了glibc v2.29。然后,基于这个堆栈过流链接,我试图编译这个示例,但是我得到了以下错误。

第一次尝试命令:

gcc --dynamic-linker=/usr/local/glibc/lib/ld-linux-x86-64.so.2 -Wall -g -o main.c -Wl,-rpath=/usr/local/glibc/lib -Wl,

首次尝试错误日志:

代码语言:javascript
复制
main.c:1:10: fatal error: threads.h: No such file or directory
#include <threads.h>
         ^~~~~~~~~~~
compilation terminated.

第二次尝试命令:在第二次尝试中,我使用"-I" & "-L" GCC命令选项。

gcc --dynamic-linker=/usr/local/glibc/lib/ld-linux-x86-64.so.2 -Wall -g -I/usr/local/glibc/include -o main.l/usr/local/glibc/lib -Wl,-rpath=/usr/local/glibc/lib -Wl,

第二次尝试错误日志:

代码语言:javascript
复制
/tmp/ccCNYemW.o: In function `main':
/home/.../main.c:14: undefined reference to `thrd_create'
/home/.../main.c:16: undefined reference to `thrd_join'
collect2: error: ld returned 1 exit status

所以我不知道问题出在哪里。请帮帮我。

EN

回答 2

Stack Overflow用户

发布于 2019-02-12 16:42:05

首先,不要将替代的libc (或libc的替代版本)放在普通包含和库搜索(链接时间和运行时库搜索)搜索的主系统路径中。这是灾难的秘诀。在/usr/local/中安装不同的glibc确实避免了系统的崩溃,但是现在您只在相同的工具可以看到和使用它们的地方安装了两个。

要做到这一点,您确实需要一个完全独立的工具链(gcc,binutils)在完全独立的路径中(如~/my_glibc_root/.../opt/alt_glibc_root/...)。我不确定是否有推荐的方法。在Linux中从头开始使用glibc构建过程可能是一个寻找想法的好地方。理论上,它可以在一个阶段内完成,我在musl-交叉制造中使用musl,通过在gcc构建系统中仔细使用中间生成规则来实现。但是将同样的想法应用于glibc可能需要额外的注意。

票数 3
EN

Stack Overflow用户

发布于 2019-02-16 18:53:56

第二次尝试命令:在第二次尝试中,我使用"-I“和"-L”GCC命令选项。 gcc -Wall -g -I/usr/local/glibc/include -o main main.c -L/usr/local/glibc/lib -Wl,--rpath=/usr/local/glibc/lib -Wl,--dynamic-linker=/usr/local/glibc/lib/ld-linux-x86-64.so.2

这个命令几乎是正确的。thrd_createthrd_join函数是在libpthread中定义的,您没有对它们进行链接。

-pthread添加到编译命令中,链接就会成功。

P.S.R.关于不要在/usr/local中安装替代GLIBC的建议也是一个不错的建议。

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

https://stackoverflow.com/questions/54654603

复制
相关文章

相似问题

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