【学习笔记】使用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 found
 libc.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

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

最近更新

  1. TCP协议是安全的吗?

    2024-06-12 04:10:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-12 04:10:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-12 04:10:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-12 04:10:03       20 阅读

热门阅读

  1. 算法刷题 322. 零钱兑换

    2024-06-12 04:10:03       12 阅读
  2. ASP.NET Core自定义认证和授权搭建流程(使用JWT)

    2024-06-12 04:10:03       6 阅读
  3. AIGC涉及到的算法(一)

    2024-06-12 04:10:03       7 阅读
  4. 集线器(HUB)简介

    2024-06-12 04:10:03       10 阅读
  5. dp类总结

    2024-06-12 04:10:03       9 阅读
  6. Spring是什么??IOC又是什么??

    2024-06-12 04:10:03       9 阅读
  7. 学习PLC+LabVIEW

    2024-06-12 04:10:03       8 阅读
  8. 【VUE3】自定义防抖指令

    2024-06-12 04:10:03       8 阅读