【发布时间】:2019-07-06 08:48:03
【问题描述】:
基于此Stackoverflow 链接,我在 Linux 操作系统的“/usr/local/glibc”路径中下载并安装了 glibc v2.29。然后基于此Stackoverflow 链接,我尝试编译此Example,但出现以下错误。
首次尝试命令:
gcc -Wall -g -o main main.c -Wl,--rpath=/usr/local/glibc/lib -Wl,--dynamic-linker=/usr/local/glibc/lib/ld-linux -x86-64.so.2
首次尝试错误日志:
main.c:1:10: fatal error: threads.h: No such file or directory
#include <threads.h>
^~~~~~~~~~~
compilation terminated.
第二次尝试命令: 在第二次尝试中,我使用 "-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
第二次尝试错误日志:
/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
所以我不知道问题出在哪里。请帮帮我。
【问题讨论】:
-
第二次尝试是否应该有
-Wl,-lthread或类似于线程库中的链接? -
什么是“-lthread”? “-lthread”的正确值是多少?我主要用 GO 编写程序,现在尝试学习 c,因为我也喜欢 C。
-
构建和安装替代 glibc 并不难,但实际上使用它可能非常麻烦,尤其是因为在基于 glibc 的系统中,几乎所有工具和其他整个系统中的库依赖于glibc。
-
抱歉没有意识到
thrd_create... 来自 libc。您可以尝试安装到docker容器中 -
您确定您机器上的
glibc 2.29带有thrd_create吗?你能检查/usr/local/glibc/lib/libc.so.6是否启用了符号?您可能对 gcc 的--sysroot选项更感兴趣,或者只是创建一个 chroot。