网站首页 > 编程文章 正文
手动编译安装
如果需要最新版本的 GCC,可以手动下载源码并编译安装。这种方法适合需要特定版本或自定义编译选项的情况。
# 下载 GCC 源码(假设最新版本是 12.2.0)
wget http://ftp.gnu.org/gnu/gcc/gcc-12.2.0/gcc-12.2.0.tar.gz
tar -xzf gcc-12.2.0.tar.gz
cd gcc-12.2.0
# 下载依赖
./contrib/download_prerequisites
# 创建构建目录
mkdir build
cd build
# 配置和编译
../configure --disable-multilib
make -j$(nproc)
# 安装
sudo make install
gcc ld.so.conf动态库配置
1. 添加库路径到ld.so.conf
首先,你需要将包含库文件的目录添加到 /etc/ld.so.conf 或创建一个新的配置文件在 /etc/ld.so.conf.d/ 目录下。
假设你的库文件位于 /usr/local/lib/gcc 和 /export/gcc-12.2.0/libphobos/libdruntime/gcc,你可以创建一个新的配置文件,例如 /etc/ld.so.conf.d/gcc-12.2.conf:
sudo nano /etc/ld.so.conf.d/gcc-12.2.conf
然后添加以下内容:
/usr/local/lib/gcc
/export/gcc-12.2.0/libphobos/libdruntime/gcc
保存并退出编辑器。
2. 运行ldconfig更新缓存
更新动态链接库缓存:
sudo ldconfig
3. 更新环境变量
为了确保系统可以找到新的 GCC 可执行文件和库,你还需要更新环境变量 PATH 和 LD_LIBRARY_PATH。你可以将这些变量添加到你的 shell 配置文件(例如 ~/.bashrc 或 ~/.zshrc)中。
编辑你的 shell 配置文件:
nano ~/.bashrc
添加以下内容:
# 添加 GCC 可执行文件路径
export PATH=/usr/local/bin/gcc:/app/third-party/gcc:/export/gcc-12.2.0/gcc:/export/gcc-12.2.0/build/gcc:$PATH
# 添加 GCC 库文件路径
export LD_LIBRARY_PATH=/usr/local/lib/gcc:/export/gcc-12.2.0/libphobos/libdruntime/gcc:$LD_LIBRARY_PATH
保存并退出编辑器,然后重新加载配置文件:
source ~/.bashrc
4. 验证配置
验证你的设置是否正确:
# 检查 GCC 版本
gcc --version
# 检查库路径是否已添加
echo $LD_LIBRARY_PATH
如果一切配置正确,系统应该能够找到并使用你安装的 GCC 12.2 及其相关库。
lld命令用法
在 Linux 系统中,查看二进制文件的动态库依赖关系通常使用 ldd 命令。ldd 命令列出可执行文件或共享库所依赖的所有共享库。
使用ldd查看动态库依赖
假设你有一个可执行文件 my_program 或一个共享库 libmylib.so,你可以使用以下命令查看其动态库依赖:
ldd my_program
或
ldd libmylib.so
示例
假设你有一个名为 my_program 的可执行文件,你可以运行以下命令来查看其依赖的库:
ldd my_program
输出可能如下:
linux-vdso.so.1 (0x00007fffd5d8d000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f9c3d1b0000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9c3cfc0000)
/lib64/ld-linux-x86-64.so.2 (0x00007f9c3d4c0000)
解释输出
- linux-vdso.so.1:这是一个虚拟动态共享对象,通常由内核提供。
- libm.so.6 和 libc.so.6:这些是标准的 C 库和数学库。
- /lib64/ld-linux-x86-64.so.2:这是动态链接器/加载器。
如果找不到库
如果某些库未找到,ldd 输出中会显示 not found。例如:
libmylib.so.1 => not found
这种情况通常表示库文件未在系统的标准库路径中。你可以通过以下方法解决:
添加库路径到 LD_LIBRARY_PATH:
export LD_LIBRARY_PATH=/path/to/your/library:$LD_LIBRARY_PATH
将库路径添加到 ld.so.conf 并运行 ldconfig:
编辑 /etc/ld.so.conf.d/ 目录下的配置文件,添加库路径,然后运行 ldconfig:
sudo nano /etc/ld.so.conf.d/my_custom_libs.conf
添加以下内容:
/path/to/your/library
保存并退出编辑器,然后更新缓存:
sudo ldconfig
使用objdump查看详细信息
如果你需要更详细的信息,可以使用 objdump 工具。objdump 是 GNU Binutils 中的一个工具,可以显示二进制文件的各种信息。
例如,查看动态库依赖:
objdump -p my_program | grep NEEDED
输出可能如下:
NEEDED libm.so.6
NEEDED libc.so.6
错误处理
GCC 12.2 已安装 ,依旧报错/lib64/libstdc++.so.6: version `GLIBCXX_3.4.29' not found
排查问题
strings /path/to/your/gcc/lib64/libstdc++.so.6 | grep GLIBCXX
如果输出中包含 GLIBCXX_3.4.29,说明你的 GCC 12.2 确实包含这个符号。
猜你喜欢
- 2024-10-23 升级Xcode10的一个问题(xcode更新特别慢)
- 2024-10-23 C++/C++11中命名空间(namespace)的使用
- 2024-10-23 Linux下C++程序组成(linux系统运行c++程序)
- 2024-10-23 Linux 命令神器:lsof(linux lsof命令详解)
- 2024-10-23 Xcode12 踩坑记录(xcode12新功能)
- 2024-10-23 Linux 命令 dirs(磁盘管理)——想玩转linux就请一直看下去
- 2024-10-23 如何解决_ZNSt18condition_variable10notify_oneEv不存在的问题
- 2024-10-23 IBM Spectrum LSF Session Scheduler 提高总体集群利用率和系统性能
- 2024-10-23 深度学习在美团配送ETA预估中的探索与实践
- 2024-10-23 安卓系统手机文件夹及其文件详细解析
你 发表评论:
欢迎- 06-24一个老爸画了超级有爱的365幅画 | 父亲节献礼
- 06-24产品小白看魏则西事件——用产品思维审视百度推广
- 06-24某教程学习笔记(一):13、脚本木马原理
- 06-24十大常见web漏洞——命令执行漏洞
- 06-24初涉内网,提权那些事(内网渗透提权)
- 06-24黑客命令第16集:47种最常见的**网站方法2/2
- 06-24铭说 | 一句话木马的多种变形方式
- 06-24Java隐藏的10倍效率技巧!90%程序员不知道的魔法方法(附代码)
- 最近发表
- 标签列表
-
- spire.doc (70)
- instanceclient (62)
- solidworks (78)
- system.data.oracleclient (61)
- 按键小精灵源码提取 (66)
- pyqt5designer教程 (65)
- 联想刷bios工具 (66)
- c#源码 (64)
- graphics.h头文件 (62)
- mysqldump下载 (66)
- libmp3lame (60)
- maven3.3.9 (63)
- 二调符号库 (57)
- git.exe下载 (68)
- diskgenius_winpe (72)
- pythoncrc16 (57)
- solidworks宏文件下载 (59)
- qt帮助文档中文版 (73)
- satacontroller (66)
- hgcad (64)
- bootimg.exe (69)
- android-gif-drawable (62)
- axure9元件库免费下载 (57)
- libmysqlclient.so.18 (58)
- springbootdemo (64)
本文暂时没有评论,来添加一个吧(●'◡'●)