您的位置:首页 > 新闻 > 热点要闻 > 【学习笔记】使用gcc编译程序并检查依赖的库

【学习笔记】使用gcc编译程序并检查依赖的库

2025/2/24 18:25:02 来源:https://blog.csdn.net/a_golden_fish/article/details/139610335  浏览:    关键词:【学习笔记】使用gcc编译程序并检查依赖的库

编译

gcc echo.c -o app -lfcgi

-o app:指定编译后的输出文件名为 app。
-lfcgi:告诉编译器链接 FastCGI 库。

检查

ldd app

ldd 是一个在 Unix 和类 Unix 系统中用来打印一个已编译的程序所依赖的共享库列表的命令。当你运行 ldd app 命令时,它会列出所有由 app 程序在运行时需要的共享库。
得到:

 linux-vdso.so.1 =>  (0x00007fffffbfb000)libfcgi.so.0 => not foundlibc.so.6 => /lib64/libc.so.6 (0x00007f8536f4f000)/lib64/ld-linux-x86-64.so.2 (0x00007f853731d000)

在这里插入图片描述
not found说明编译后的程序 app 在运行时依赖于 libfcgi.so.0 这个共享库,但是系统无法找到这个库。

搜索缺少的库并添加

后缀的.0指的是版本号,实际文件名称中不含有。所以搜索的时候无需添加。
搜索库:

find / -name "libfcgi.so"

得到库的路径
在这里插入图片描述

添加路径

LD_LIBRARY_PATH

LD_LIBRARY_PATH 是一个环境变量,用于在运行时为动态链接器(ld.so)提供额外的搜索路径,以便找到程序所需的共享库。当程序被执行时,动态链接器会首先在 LD_LIBRARY_PATH 指定的目录中查找所需的共享库,然后再按照 /etc/ld.so.conf 文件及其包含的文件中定义的顺序搜索。

临时添加

1.在命令行中添加:
打开终端,然后使用 export 命令添加路径。例如,如果您想添加 /usr/local/lib 到 LD_LIBRARY_PATH,可以使用以下命令:

export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

这条命令只会影响当前会话,一旦您关闭终端或注销,修改就会失效。

2.在脚本中添加:
可以在代码的开头添加上述 export 命令,这样代码执行时就会使用这个环境变量。

永久添加

1.对当前用户:
将上述 export 命令添加到当前用户的 shell 配置文件中,例如 /home/username/.bashrc、/home/username/.profile 或 /home/username/.bash_profile(取决于使用的是哪个 shell 和具体配置)。使用文本编辑器打开配置文件,例如:

echo 'export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH' >> ~/.bashrc

然后,为了使更改立即生效,可以运行:

source ~/.bashrc

2.对所有用户:
如果所有用户都使用这个环境变量,可以将其添加到 /etc/profile 或 /etc/environment 文件中。
需要 root 权限:

sudo echo 'export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH' >> /etc/profile

修改ld.so.conf文件

位于/etc/目录下的ld.so.conf是 Linux 系统中用于配置动态链接器(ld.so)搜索共享库的配置文件。

vim /etc/ld.so.conf
//或者
sudo vim /etc/ld.so.conf

添加上刚刚查找到的路径,之后再运行以下命令来更新缓存(需要root权限):

sudo ldconfig

验证

进行完之后再验证

ldd app

在这里插入图片描述
能查找到路径了。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com