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

news2024/9/23 3:33:42

编译

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1813816.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows 10 中添加 开机启动 自动运行的程序

Win R 输入 “shell:startup” ,回车确定 把 应用的 快捷方式 复制到文件夹中。就会自动开机启动了 参照图:

VLAN配置实验

目录 一、概述 二、组网 三、配置 四、验证 一、概述 以太网是一种基于CSMA/CD的共享通讯介质的数据网络通讯技术。当主机数目较多时会导致冲突严重、广播泛滥、性能显著下降甚至造成网络不可用等问题。 通过交换机可以解决LAN互连虽然可以解决冲突严重的问题,但是仍…

Redis 搭建主从复制、哨兵模式【Windows】

Redis 主从复制模式是一种用于数据冗余和可伸缩性的机制,它允许从服务器(Slave)从主服务器(Master)复制数据,从而实现数据的备份和读写分离。以下是关于Redis主从复制模式的详细介绍: 1. 主从复…

电脑U盘管理软件有哪些?精选四款适合企业的U盘管理软件

在当前的数字化时代,电脑U盘作为重要的数据存储和传输工具,其管理显得尤为关键。为了确保U盘数据的安全性和完整性,许多企业和个人都选择使用专业的U盘管理软件。以下是几款值得推荐的电脑U盘管理软件,包括域智盾在内,…

Python网络爬虫4-实战爬取pdf

1.需求背景 爬取松产品中心网站下的家电说明书。这里以冰箱为例:松下电器-冰箱网址 网站分析: 第一步: 点击一个具体的冰箱型号,点击了解更多,会打开此型号电器的详情页面。 第二步:在新打开的详情页面中…

阻塞IO、非阻塞IO、IO多路复用和信号驱动IO简介

一、分类 在UNIX或Liunx下主要有4中IO模型 阻塞IO:最简单、最常用、效率最低 阻塞IO简介和代码示例-CSDN博客当进程执行读操作的时候,如果缓冲区有内容,则继续读取内容向下执行。缓冲区没内容,进程进入休眠态,直到缓冲区中再次…

老徐亲自带队死磕 30 天 IP 公众号价值写作, 邀请你一起玩

* 大家好,我是前端队长。前端程序员,2023年开始玩副业。做过AI绘画,公众号 AI 爆文,AI代写项目,累计变现五位数。 — 老徐的一人企业书籍提到一点:120、完全没基础的同学,玩副业,玩 …

springboot连接多个库

一个SpringBoot项目,同时连接两个数据库:比如一个是Mysql数据库,一个是oracle数据库(啥数据库都一样,连接两个同为oracle的数据库,或两个不同的数据库,只需要更改对应的driver-class-name和jdbc…

视觉SLAM14精讲——相机与图像3.2

视觉SLAM14精讲 三维空间刚体运动1.0三维空间刚体运动1.1三维空间刚体运动1.2李群与李代数2.1相机与图像3.1 视觉SLAM14精讲——相机与图像3.2 视觉SLAM14精讲畸变有关重投影误差缩放实际使用 畸变 相机畸变是相机镜头光学缺陷所致的缺陷, 在光学领域这种问题是没…

Apple Intelligence:一文详细解读苹果AI!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,所以创建了“AI信息Gap”这个公众号,专注于分享AI全维度知识…

更适合工程师和研究僧的FPGA专项培训课程

各位编程精英er~ 社区打造的FPGA工程师培训班上线后,有不少同学后台私信询问:“能不能出个那种专门针对某个知识点的课程呢?我想针对自己的薄弱点深入学习。” 贴心如我,当然会满足大家的学习需求啦。本周,社区FPGA专…

Anime Girls Pack

动漫女孩包 35个动画(就地)支持人形。 8情绪。 角色列表:原艾艾琪惠美子惠理文子星薰和子佳子奈子理子凛老师小樱老师津雨僵尸女孩01 下载:​​Unity资源商店链接资源下载链接 效果图:

《维汉翻译通》App的OCR识别技术难度怎么样?通过哪些优化措施来提高文字识别的准确率呢?

《维汉翻译通》App的OCR技术在处理不同字体和大小的文本时,采用了以下优化措施来确保高准确率: 多字体支持:OCR引擎能够识别多种字体样式,包括常见的印刷体和手写体,以及一些特殊的艺术字体。 自适应缩放&#xff1a…

Go使用https

一、服务端 1. 生成私钥和证书 安装OpenSSL windows安装OpenSSL生成CA证书创建证书 以上两个步骤,参考:Go http2 和 h2c 2. 代码 package mainimport ("log""net/http""time""golang.org/x/net/http2" )co…

JVM (二)类加载

一,类的生命周期 加载 连接 验证 准备 解析 初始化 使用 卸载 加载、验证、准备和初始化这四个阶段发生的顺序是确定的,而解析阶段则不一定; 类加载几个阶段按顺序开始,而不是按顺序进行或完成,通常都会交叉进…

2024 New Relic Java 生态系统报告

New Relic 发布了 2024 年度 Java 生态系统报告,数据来源于使用 New Relic 监控的线上 Java 应用。从这个报告中,我们可以看到 Java 发展的一些趋势。 在 Java 版本方面,新版本的使用率越来越高。Java 11 的使用率是 32.9%,Java 1…

Github 2024-06-12 C开源项目日报 Top10

根据Github Trendings的统计,今日(2024-06-12统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量C项目10PHP项目1PLpgSQL项目1C++项目1Ventoy: 100%开源的可启动USB解决方案 创建周期:1534 天开发语言:C协议类型:GNU General Public Licen…

软件架构风格探析

软件架构是系统设计的基石,它定义了不同组件、层次之间的交互和整合方式。选择恰当的架构风格对于构建高效、可维护以及可扩展的软件系统至关重要。本文将详细探讨几种关键的软件架构风格,包括数据流风格、仓库、调用返回、独立构件和虚拟机,…

课时152:项目发布_手工发布_方案解读

1.2.1 方案解读 学习目标 这一节,我们从 基础知识、简单实践、小结 三个方面来学习 基础知识 案例需求 实现一套业务环境的项目发布流程,基本的网站架构效果如下:架构解读:负载均衡采用Nginx服务,基于请求内容进行…

18.3 HTTP服务器-响应不同类型的内容和请求、获取请求数据

1. 响应不同类型的内容 在向客户端返回响应时,服务器应根据客户端的具体需求,为其提供不同类型的内容。一些常见的内容类型包括: text/plain —— 纯文本格式 text/html —— HTML格式 application/json —— JSON格式 application/xml —…