关于version `GLIBC_2.34’ not found解决办法
问题来源
#include "stdio.h"
void main(void)
{
printf("Hello World!");
}
arm-linux-gnueabihf-gcc main.c -o main
debian@npi:~$ ./main
./main: /lib/arm-linux-gnueabihf/libc.so.6: version `GLIBC_2.34' not found (required by ./main)
查询资料
使用bing和百度搜索 version `GLIBC_2.34’ not found 得到的解决办法归纳为一下几点
-
方法一:可以完美解决,但是太傻了,作为开发人员总不能每次开发一个系统就换自己系统的版本吧。
方法二:看运气,说不定升级了以后开发板的系统命令就用不了了,所以不建议随意升级这个库,具体原因可以
自行百度。
方法三:没看懂原理(刚入门)所以也没去尝试。
方法四:使用静态链接库,缺点是不确定以后会不会出什么问题,而且编译后的文件体积巨大。
整理思路
我查询了交叉编译的指令具体和GCC差不了多少其中有一 -l
和-L
命令。用于指定链接库的链接目录。具体用法参见GCC -l选项:手动添加链接库,所以我想能不能在编译的的时候指定需要链接的库或目录,这样就不会需要改变双方的环境了。
解决步骤
查找网络发现在编译c语言时候需要用到的库为libc
。
我不使用编译器自带的而是从开发板上下载了该文件作为编译文件的链接库。
然后在编译的时候指定该文件作为链接目标。
yhw@yhw-virtual-machine:~/gxl$ scp laojia:/lib/libc.so.6 ./ # 从开发板(服务器)系统的/lib目录下找到libc.so.6下载到当前目录
yhw@yhw-virtual-machine:~/gxl$ arm-linux-gnueabihf-gcc main.c -o main ./libc.so.6 #指定刚刚下载的libc.so.6文件作为编译时候链接文件
debian@npi:~$ ./main #运行
Hello World!
debian@npi:
而后尝试用指令-L指定一个目录让编译器从其中查找链接库,这样不用一个一个的输入文件。
yhw@yhw-virtual-machine:~/gxl$ arm-linux-gnueabihf-gcc main.c -o main -L ./lib_dir/ #自行创建文件夹并将文件移入后再执行此步骤
总结
使用编译器-l
和-L
选项手动添加从目标系统下载的链接库从而解决gblc版本不匹配的问题。
后续将继续了解一下gblc-all–in–one工具的使用原理。
原文地址:https://blog.csdn.net/YuHWEI/article/details/128736804
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_46438.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!