关于version `GLIBC_2.34' not found解决办法
问题来源
源代码
1 |
|
使用arm-linux-gnueabihf-gcc交叉编译
1 | arm-linux-gnueabihf-gcc main.c -o main |
部署到开发板后运行报错
1 | debian@npi:~$ ./main |
查询资料
使用bing和百度搜索 version `GLIBC_2.34’ not found 得到的解决办法归纳为一下几点
- 升级部署环境系统版本,降低打包编译环境的系统版本
在部署环境中下载符合版本的gblc库(一般高于原来的环境)- 使用工具gblc-all-in-one文档描述是
这是一个在ubuntu环境下随意更改文件glibc版本的便捷工具
使用静态链接库
方法一:可以完美解决,但是太傻了,作为开发人员总不能每次开发一个系统就换自己系统的版本吧。
方法二:看运气,说不定升级了以后开发板的系统命令就用不了了,所以不建议随意升级这个库,具体原因可以
自行百度。
方法三:没看懂原理(刚入门)所以也没去尝试。
方法四:使用静态链接库,缺点是不确定以后会不会出什么问题,而且编译后的文件体积巨大。
整理思路
我查询了交叉编译的指令具体和GCC差不了多少其中有一 -l
和-L
命令。用于指定链接库的链接目录。具体用法参见GCC -l选项:手动添加链接库,所以我想能不能在编译的的时候指定需要链接的库或目录,这样就不会需要改变双方的环境了。
解决步骤
查找网络发现在编译c语言时候需要用到的库为libc
。
我不使用编译器自带的而是从开发板上下载了该文件作为编译文件的链接库。
然后在编译的时候指定该文件作为链接目标。
1 | yhw@yhw-virtual-machine:~/gxl$ scp laojia:/lib/libc.so.6 ./ # 从开发板(服务器)系统的/lib目录下找到libc.so.6下载到当前目录 |
然后将程序部署到开发板环境运行成功
1 | debian@npi:~$ ./main #运行 |
而后尝试用指令-L指定一个目录让编译器从其中查找链接库,这样不用一个一个的输入文件。
1 | yhw@yhw-virtual-machine:~/gxl$ arm-linux-gnueabihf-gcc main.c -o main -L ./lib_dir/ #自行创建文件夹并将文件移入后再执行此步骤 |
编译通过,完美解决。
总结
使用编译器-l
和-L
选项手动添加从目标系统下载的链接库从而解决gblc版本不匹配的问题。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Rain的小破站!
评论