安装glibc时的奇怪问题(转)

本文记录了在编译 glibc 2.3.6 版本过程中遇到的 configure 错误,并给出了正确的解决方法。通过在单独的构建目录中运行 configure 命令,成功解决了问题。
部署运行你感兴趣的模型镜像

原文:http://blog.sina.com.cn/s/blog_4b9ac14701008mzq.html
tar -zxvf glibc-2.3.6.tar.gz
cd glibc-2.3.6
./configure --prefix=/usr/local/glibc2.3.6/
报出错误如下:
configure: error: you must configure in a separate build directory
于是网上有达人说不能在解压的目录下进行configure,于是
cd ..
./glibc-2.3.6/configure --prefix=/usr/local/glibc2.3.6/
ok,成功了

您可能感兴趣的与本文相关的镜像

Dify

Dify

AI应用
Agent编排

Dify 是一款开源的大语言模型(LLM)应用开发平台,它结合了 后端即服务(Backend as a Service) 和LLMOps 的理念,让开发者能快速、高效地构建和部署生产级的生成式AI应用。 它提供了包含模型兼容支持、Prompt 编排界面、RAG 引擎、Agent 框架、工作流编排等核心技术栈,并且提供了易用的界面和API,让技术和非技术人员都能参与到AI应用的开发过程中

0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 getaddrinfo 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 timegm 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 difftime 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 getnameinfo 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 nanosleep 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 strncat 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 unlink 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 strcspn 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 shm_open 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 fgets 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 ftruncate 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 sendto 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 __libc_start_main 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 pthread_mutex_lock 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 sigfillset 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 epoll_ctl 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 clock_gettime 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 localtime 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 time 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 recvfrom 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 fileno 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 readdir 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 rename 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 strtod 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 atoi 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 inet_aton 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 qsort 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.33 fstat 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 readlink 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 getpid 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 socket 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 pselect 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 snprintf 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 strcat 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 strncasecmp 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 putchar 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 fseeko 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 pthread_exit 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 fprintf 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 sigaction 0000000000000000 DO *UND* 0000000000000000 GLIBC_2.17 __stack_chk_guard 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 memcpy 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 htons 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 __ctype_b_loc 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 fread 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 gethostbyname 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 strncpy 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 exit 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 cos 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 munmap 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 ftello 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 strftime 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 strrchr 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 localtime_r 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 mktime 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 select 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 tcdrain 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 __cxa_atexit 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 sync 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 sleep 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 shutdown 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 gmtime 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 strstr 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 shmat 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 _exit 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 ntohs 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 pclose 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 getsockopt 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 mmap 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 secure_getenv 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 fputc 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 clock 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 closedir 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 __isoc99_sscanf 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 strncmp 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 mq_open 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 inet_pton 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 abort 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 pthread_join 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 __isoc99_fscanf 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 strspn 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 __sigsetjmp 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 usleep 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 ferror 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 fgetc 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 uname 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 fflush 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 pthread_setname_np 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 pthread_mutex_destroy 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 remove 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 __assert_fail 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.25 getrandom 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 __errno_location 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 freeaddrinfo 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 recv 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 read 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 mprotect 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 sigprocmask 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 perror 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 signal 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 strtoll 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 mlock 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 syscall 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 siglongjmp 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 shmdt 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 fopen 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 mq_send 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 tolower 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 listen 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 __stack_chk_fail 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 inet_ntop 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 write 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 mq_close 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 socketpair 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 vprintf 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 rand 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 cfgetospeed 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 __getauxval 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 poll 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 gai_strerror 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 feof 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 memcmp 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 fseek 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 pthread_cancel 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 mq_unlink 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 send 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 cfsetispeed 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 bind 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 pthread_mutex_init 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 fclose 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 ioctl 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 strtoul 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 setvbuf 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 getpeername 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 pthread_create 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 pthread_mutex_unlock 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 epoll_create1 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 strtol 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 sqrt 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 tcgetattr 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 sin 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 opendir 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 strdup 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 calloc 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 getenv 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 vsnprintf 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 popen 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 setsockopt 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 mq_receive 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 gettimeofday 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 strchr 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 mkdir 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 __xpg_strerror_r 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 getauxval 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 memchr 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 sysconf 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 accept 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 shmget 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 cfsetospeed 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 reboot 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 atan2 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 puts 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 tcsetattr 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 epoll_wait 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 sched_yield 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 strerror 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 sprintf 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 pthread_testcancel 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 fwrite 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 madvise 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 inet_addr 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 sigdelset 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 fputs 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 printf 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 strcpy 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 freopen 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 memmove 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 close 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 vfprintf 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 connect 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.33 stat 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 __ctype_tolower_loc 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 strlen 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 fopen64 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 ftell 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 fcntl 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 utime 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 pthread_self 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 shm_unlink 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 srand 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 open 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 getsockname 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.17 memset 00000000007b2560 g DO .bss 0000000000000008 GLIBC_2.17 stdout 0000000000403c60 DF *UND* 0000000000000000 GLIBC_2.17 realloc 0000000000000000 w DF *UND* 0000000000000000 GLIBC_2.25 getentropy 00000000007b2568 g DO .bss 0000000000000008 GLIBC_2.17 stderr 00000000007b2570 g DO .bss 0000000000000008 GLIBC_2.17 stdin 0000000000404130 DF *UND* 0000000000000000 GLIBC_2.17 malloc 00000000004043b0 DF *UND* 0000000000000000 GLIBC_2.17 free 0000000000404220 DF *UND* 0000000000000000 GLIBC_2.17 strcmp 0000000000404520 DF *UND* 0000000000000000 GLIBC_2.17 strcasecmp
最新发布
11-21
你提供的 `objdump -T ./app` 输出非常清晰,我们来 **逐行分析并精准定位问题根源和解决方案**。 --- ## ✅ 一、关键信息提取 你的程序 `./app` 需要以下两个高于 GLIBC_2.17 的符号: ```text 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.33 fstat 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.33 stat ``` 以及: ```text 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.25 getrandom 0000000000000000 w DF *UND* 0000000000000000 GLIBC_2.25 getentropy ``` ### 🔍 结论: > ❌ 你的程序在编译使用了需要 **glibc 2.33** 和 **glibc 2.25** 才提供的函数版本。 > > 即使大多数函数都只需要 `GLIBC_2.17`(兼容性很好),但只要有一个符号要求更高版本 → 整个程序无法运行于旧系统。 --- ## ✅ 二、具体是哪些函数导致依赖高版本 glibc? 从输出可以看出: | 函数 | 所需最低 glibc 版本 | 是否可替换 | |------|---------------------|-----------| | `stat()` / `fstat()` | `GLIBC_2.33` ❌ | ⚠️ 异常!正常只需 `2.2.5` | | `getrandom()` | `GLIBC_2.25` | ✅ 可用 syscall 替代 | | `getentropy()` | `GLIBC_2.25` | ✅ 可读 `/dev/urandom` 回退 | 📌 最奇怪的是:`stat` 和 `fstat` 居然标记为 `GLIBC_2.33`! 这说明:**你在较新的系统上编译链接了新版本的 C 库头文件或启用了某些特性宏(如 `_FILE_OFFSET_BITS=64` + 新 ABI)** 但实际上这些函数很早就存在了。出现 `GLIBC_2.33` 是因为调用的是 **新的 `statx()` 增强接口** 或使用了新的 symbol versioning。 --- ## 🧩 为什么 `stat/fstat` 会要求 GLIBC_2.33? 这是因为在 **glibc 2.33+ 中引入了对 `stat` 系列函数的新实现方式**,尤其是当你启用大文件支持或多架构编译,链接器可能绑定到新版 symbol。 例如: ```c struct stat buf; stat("/tmp", &buf); // 可能被解析成 GLIBC_2.33 版本 ``` 即使语义不变,动态链接器仍会检查 `.gnu.version_r` 段中记录的版本需求。 你可以用下面命令查看详细依赖版本段: ```bash readelf -V ./app ``` --- ## ✅ 三、解决方案汇总 ### ✅ 方案 1:【推荐】在低版本 glibc 环境重新编译(最安全) 目标:让所有符号最多只依赖 `GLIBC_2.17`(Debian 8+/Ubuntu 16.04 起均满足) #### 推荐环境: - Debian 11 (Bullseye)glibc 2.31 - Ubuntu 20.04 → glibc 2.31 - Docker 容器构建(隔离干净) ```bash # 使用 Debian 11 aarch64 容器编译(适用于 RK3588) docker run -it --rm \ -v $(pwd):/src \ multiarch/debian-debootstrap:aarch64-bullseye \ bash ``` 容器内操作: ```bash apt update && apt install build-essential # 编译你的程序 gcc -o app main.c ``` ✅ 编译出的二进制将不会引用 `GLIBC_2.33` 的 `stat/fstat`,而是使用传统版本。 --- ### ✅ 方案 2:避免使用 `getrandom()` 和 `getentropy()`(降级替代) 这两个函数是从 glibc 2.25 开始才提供: ```c // ❌ 这样写会导致 GLIBC_2.25 依赖 ssize_t n = getrandom(buf, len, 0); int ret = getentropy(buffer, 256); ``` #### ✅ 改为兼容写法: ##### 替代 `getrandom()`: ```c #include <sys/syscall.h> #include <unistd.h> static inline ssize_t my_getrandom(void *buf, size_t buflen, unsigned flags) { return syscall(SYS_getrandom, buf, buflen, flags); } ``` > 注意:老内核(< 3.17)不支持 `SYS_getrandom`,需回退到 `/dev/urandom` 完整封装: ```c ssize_t safe_getrandom(void *buf, size_t count) { static int warned = 0; // 尝试系统调用 long ret = syscall(SYS_getrandom, buf, count, 0); if (ret >= 0) return ret; // 失败则 fallback 到 /dev/urandom if (!warned) { write(STDERR_FILENO, "Warning: falling back to /dev/urandom\n", 39); warned = 1; } FILE *urand = fopen("/dev/urandom", "r"); if (!urand) return -1; size_t n = fread(buf, 1, count, urand); fclose(urand); return n; } ``` ##### 替代 `getentropy()`: 它本质就是获取 256 字节随机数,可用上面函数代替: ```c int my_getentropy(void *buffer) { return safe_getrandom(buffer, 256) == 256 ? 0 : -1; } ``` --- ### ✅ 方案 3:强制使用旧版 `stat/fstat`(通过汇编符号别名或弱引用) 这不是常规做法,但可行。 #### 方法:手动声明为弱符号,并 fallback 实现 不过更简单的办法是:确保不要引入任何依赖 `GLIBC_2.33` 的库或头文件。 > ⚠️ 根本原因往往是:你在 Ubuntu 22.04+/Debian 12+ 上直接编译,而没有设置正确的 `-D_FORTIFY_SOURCE=1`、`-O2`、`-D_GNU_SOURCE` 组合,导致链接器选择了“最新”而非“最兼容”的版本。 建议添加编译标志以增强兼容性: ```bash gcc -o app main.c \ -D_XOPEN_SOURCE=700 \ -D_DEFAULT_SOURCE \ -D_GNU_SOURCE \ -O2 \ -static-libgcc \ -Wl,-Bsymbolic-functions ``` 其中 `-Bsymbolic-functions` 可减少对外部 GLIBC 版本的依赖。 --- ### ✅ 方案 4:静态链接(终极避坑方案) 如果你不怕体积变大,可以直接静态编译: ```bash gcc -static -o app main.c ``` ✅ 优点: - 不再依赖系统的 `libc.so.6` - 可在任意 aarch64 Linux 上运行(只要 CPU 架构匹配) ⚠️ 缺点: - 体积大几 MB - 无法利用系统安全更新(如 glibc 漏洞修复) - 某些 NSS 功能(如 DNS over TLS)失效 适合嵌入式部署、一次性工具。 --- ## ✅ 四、验证修复结果 编译后运行: ```bash objdump -T ./app | grep -E "GLIBC_2.25|GLIBC_2.33" ``` 如果无输出 → 成功降级! 再运行: ```bash ldd --version ``` 确认你的目标设备 glibc ≥ 2.17 即可运行。 --- ## ✅ 五、总结:你现在该怎么办? | 步骤 | 操作 | |------|------| | 1️⃣ | 确认当前编译环境是否是 Ubuntu 22.04 / Debian 12+?如果是 → 很可能是源头问题 | | 2️⃣ | 改用 Debian 11 或 Ubuntu 20.04 环境重新编译 | | 3️⃣ | 替换 `getrandom()` 和 `getentropy()` 为 syscall 或 `/dev/urandom` | | 4️⃣ | 使用 `objdump -T app` 验证不再依赖 `GLIBC_2.33` | | 5️⃣ | 若仍不行 → 直接 `-static` 静态编译 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值