c - 尝试在 WSL 中安装 glibc 时出错 : relocation R_X86_64_PC32 against undefined symbol `__GI___open64_nocancel'

标签 c gcc gnu-make glibc windows-subsystem-for-linux

当尝试将最新的 glibc 安装到我的机器中时,我执行了带有标志的“config”可执行文件: ../configure CFLAGS="-O3 -fPIC"--disable-sanity-checks它正确生成了 makefile,尽管我认为禁用健全性检查会给出一些错误。

但是每当我尝试使用 make 执行生成的 Makefile 时,控制台都会打印以下错误:

make[3]: Leaving directory '/mnt/c/Users/SCP173/Downloads/Thread/glib/glibc/elf'
gcc   -nostdlib -nostartfiles -shared -o /mnt/c/Users/SCP173/Downloads/Thread/glib/glibc/glibc-build/elf/ld.so.new                                                                                                \
          -Wl,-z,combreloc -Wl,-z,relro -Wl,--hash-style=both -Wl,-z,defs       \
          /mnt/c/Users/SCP173/Downloads/Thread/glib/glibc/glibc-build/elf/librtld.os -Wl,--version-script=/mnt/c/Users/SCP173/Downloads/Thread/glib/glibc/glibc-build/ld.map
\
          -Wl,-soname=ld-linux-x86-64.so.2                      \
          -Wl,-defsym=_begin=0
/mnt/c/Users/SCP173/Downloads/Thread/glib/glibc/glibc-build/elf/librtld.os: In function `process_envvars':
/mnt/c/Users/SCP173/Downloads/Thread/glib/glibc/elf/rtld.c:2686: undefined reference to `__GI___open64_nocancel'
/usr/bin/ld: /mnt/c/Users/SCP173/Downloads/Thread/glib/glibc/glibc-build/elf/librtld.os: relocation R_X86_64_PC32 against undefined symbol `__GI___open64_nocancel' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status

正如我所说,我尝试添加 -fPIC 标志,但仍然没有捕获它。我对 .os.map 和其他扩展(例如这些)有点陌生。我这样做完全错了吗?否则,我如何使用 gcc 编译该文件,而不是将标志传递给整个 make 命令?

最佳答案

您的文件系统设置不正确。默认情况下,NTFS 保留大小写,但不区分大小写。据我了解,当前版本的 WSL 仅以区分大小写的模式设置了部分文件系统树。 (以前的系统范围配置现在已被忽略。)

Building glibc requires a case-sensitive file system.另请注意,WSL 并不是 glibc 的合适开发环境,因为 WSL 内核模拟中的错误导致了很多测试失败。

关于c - 尝试在 WSL 中安装 glibc 时出错 : relocation R_X86_64_PC32 against undefined symbol `__GI___open64_nocancel' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55355885/

相关文章:

c - 滚动条没有被隐藏

c - 结构操作需要一些解释

c - C 的 main() 函数的有效签名是什么?

typedef 变量上缺少强制转换的编译器警告

makefile - makefile 内的版本号比较

生成文件 : reading a file with 'pure make syntaxis' (no shell commands)

c - 从头文件中的c文件访问结构体

c - 如何在 64 位 osx 上编译 gcc 32 位应用程序

c++ - 是否有针对 "conditional expression is constant"的 gcc 警告?

c - GNU makefile 中的 "premature end of file"是什么意思?