解决 version 'GLIBC_2.14' not found 问题

本文介绍在Linux C环境下如何使用iconv函数簇实现GBK与UTF-8编码之间的相互转换,以便正确创建中文目录及文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用linux C 下的函数调用创建中文目录、文件等,字符串的编码格式要求是utf-8格式的。

 

比如想要使用 int mkdir(const char *pathname, mode_t mode); 创建一个中文的目录。那么pathname的编码格式要求是utf-8的,而不能是gb3212/gbk的,否则就是乱码。

 

那么如果linux C下如何进行gbk<---->utf-8编码转换的编码装换的?使用的是iconv函数簇。

 

[cpp]  view plain  copy
  1. #include <iconv.h>  
  2.   
  3. int code_convert(char *from_charset,char *to_charset,char *inbuf,int inlen,char *outbuf,int outlen)  
  4. {  
  5.         iconv_t cd;  
  6.         int rc;  
  7.         char **pin = &inbuf;  
  8.         char **pout = &outbuf;  
  9.   
  10.         cd = iconv_open(to_charset,from_charset);  
  11.         if (cd==0)  
  12.                 return -1;  
  13.         memset(outbuf,0,outlen);  
  14.         if (iconv(cd,pin,&inlen,pout,&outlen) == -1)  
  15.                 return -1;  
  16.         iconv_close(cd);  
  17.         return 0;  
  18. }  
  19.   
  20. int u2g(char *inbuf,int inlen,char *outbuf,int outlen)  
  21. {  
  22.         return code_convert("utf-8","gb2312",inbuf,inlen,outbuf,outlen);  
  23. }  
  24.   
  25. int g2u(char *inbuf,size_t inlen,char *outbuf,size_t outlen)  
  26. {  
  27.         return code_convert("gb2312","utf-8",inbuf,inlen,outbuf,outlen);  
  28. }  

 

其中

iconv函数族的头文件是iconv.h,使用前需包含之。
#include <iconv.h>
iconv函数族有三个函数,原型如下:
(1) iconv_t iconv_open(const char *tocode, const char *fromcode);
此函数说明将要进行哪两种编码的转换,tocode是目标编码,fromcode是原编码,该函数返回一个转换句柄,供以下两个函数使用。
(2) size_t iconv(iconv_t cd,char **inbuf,size_t *inbytesleft,char **outbuf,size_t *outbytesleft);
此函数从inbuf中读取字符,转换后输出到outbuf中,inbytesleft用以记录还未转换的字符数,outbytesleft用以记录输出缓冲的剩余空间。

(3) int iconv_close(iconv_t cd);
此函数用于关闭转换句柄,释放资源。

 

### 解决 Linux 系统中 GLIBC_2.14 未找到的错误 #### 查看当前系统的 glibc 版本和支持情况 为了确认现有系统中的 glibc 支持哪些版本,可以执行命令来获取信息: ```bash strings /lib64/libc.so.6 | grep GLIBC rpm -qa | grep glibc ``` 这些命令能够帮助识别已安装的 glibc 是否包含了所需的 GLIBC_2.14 或更高版本的支持[^1]。 如果上述操作显示缺乏对 GLIBC_2.14 的支持,则说明需要更新或重新配置环境以满足依赖需求。 #### 升级 glibc 到包含 GLIBC_2.14 的版本 对于某些应用程序而言,可能确实因为特定功能而要求较新的库版本。例如,在分析 ELF 文件时可以看到某个程序明确指定了它所依赖的具体 glibc 符号及其最低版本要求: ```bash readelf -a test | grep 2.14 ``` 此命令揭示了目标二进制文件 `test` 对于 memcpy 函数调用了来自 GLIBC_2.14 及以上版本定义的接口[^2]。 因此,当遇到 “version `GLIBC_2.14' not found”的提示时,意味着运行环境中缺失必要的共享对象链接。此时可以通过编译并安装指定版本(如 glibc-2.14)的方式来解决问题。具体做法如下: 下载源码包后解压进入相应目录,并按照官方文档指导完成构建过程;一旦 make 成功结束,在 build 子目录内会生成最新的 libc.so.6 文件以及对应的符号链接关系。通过检查新创建出来的动态加载器是否含有预期标签可验证其有效性: ```bash [root@localhost build]# strings libc.so | grep GLIBC ... GLIBC_2.14 ... ``` 这表明已经成功获得了带有所需 API 定义的新版 GNU C Library 实现[^3]。 最后一步则是将自建的高版本 glibc 正确部署至适当位置以便被应用层访问到——通常建议采用独立路径而非覆盖原有系统组件以防破坏稳定性。同时调整 LD_LIBRARY_PATH 环境变量指向新增加的 lib 路径从而让受影响的应用能顺利定位到正确的共享库实例[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值