ubuntu - 构建 glibc 时未定义对 _dl_cet_check 的引用

标签 ubuntu glibc

库本图 19.10

我关注了that instruction正是:

$ mkdir $HOME/src
$ cd $HOME/src
$ git clone git://sourceware.org/git/glibc.git
$ mkdir -p $HOME/build/glibc
$ cd $HOME/build/glibc
$ $HOME/src/glibc/configure --prefix=/usr
$ make

但是在最后一个命令'make'中,我得到了以下错误(只给出了输出的结尾):

make[3]: Leaving directory '/home/denis/src/glibc/elf'
gcc   -nostdlib -nostartfiles -r -o /home/denis/build/glibc/elf/librtld.os '-Wl,-(' /home/denis/build/glibc/elf/dl-allobjs.os /home/denis/build/glibc/elf/rtld-libc.a -lgcc '-Wl,-)' \
          -Wl,-Map,/home/denis/build/glibc/elf/librtld.os.map
gcc   -nostdlib -nostartfiles -shared -o /home/denis/build/glibc/elf/ld.so.new          \
          -Wl,-z,combreloc -Wl,-z,relro -Wl,--hash-style=both -Wl,-z,defs       \
          /home/denis/build/glibc/elf/librtld.os -Wl,--version-script=/home/denis/build/glibc/ld.map            \
          -Wl,-soname=ld-linux-x86-64.so.2                      \
          -Wl,-defsym=_begin=0
/usr/bin/ld: /home/denis/build/glibc/elf/librtld.os: in function `_rtld_main_check':
/home/denis/src/glibc/elf/../sysdeps/x86/dl-prop.h:33: undefined reference to `_dl_cet_check'
/usr/bin/ld: /home/denis/src/glibc/elf/../sysdeps/x86/dl-prop.h:33: undefined reference to `_dl_cet_check'
/usr/bin/ld: /home/denis/src/glibc/elf/../sysdeps/x86/dl-prop.h:33: undefined reference to `_dl_cet_check'
/usr/bin/ld: /home/denis/build/glibc/elf/librtld.os: in function `_dl_open_check':
/home/denis/src/glibc/elf/../sysdeps/x86/dl-prop.h:41: undefined reference to `_dl_cet_open_check'
/usr/bin/ld: /home/denis/build/glibc/elf/ld.so.new: hidden symbol `_dl_cet_open_check' isn't defined
/usr/bin/ld: final link failed: bad value
collect2: error: ld returned 1 exit status
make[2]: *** [Makefile:510: /home/denis/build/glibc/elf/ld.so] Error 1
make[2]: Leaving directory '/home/denis/src/glibc/elf'
make[1]: *** [Makefile:438: elf/subdir_lib] Error 2
make[1]: Leaving directory '/home/denis/src/glibc'
make: *** [Makefile:9: all] Error 2

构建库需要做什么?

最佳答案

显然,您的 GCC 版本隐式启用了 -fcf-protection 标志。上游 GCC 不这样做,因此 glibc 配置逻辑不为此准备。您必须使用 CET 进行显式配置,如下所示:

$ $HOME/src/glibc/configure --prefix=/usr --enable-cet

因此,将链接到 CET 支持功能。

编辑 这已被归档为 Bug 25225 - ld.so fails to link on x86 if GCC defaults to -fcf-protection .它现在已固定在所有支持 CET 的 glibc 分支上。

关于ubuntu - 构建 glibc 时未定义对 _dl_cet_check 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58995065/

相关文章:

linux - 如何以毫秒为单位获取 2 个日期(Z 格式)之间的差异

python - Pycharm 无法连接到控制台进程退出代码 -1 远程解释器

ubuntu - 未找到 GLIBC_2.27 Ubuntu 16.04

gcc - 静态链接 GLIBC 和专有软件许可

c - "C or gcc"就像 "Chicken or the egg"吗? :(

linux - BitTorrent Sync 在重启时重置设备名称

c++ - 找不到 -lsocket,客户端-服务器程序中的编译问题?

c - glibc - 列表和其他数据结构实现

c++ - 为什么我会收到 glibc 错误?

php - AWS - 即使在 Ubuntu 16.04 上有足够的 RAM 时,Kswapd0 也是高 CPU