ln命令之make: *** 没有规则可以创建“/usr/lib/x86_64-linux-gnu/XXXXXX.so”需要的目标“XXX”暴力解法

本文主要是介绍ln命令之make: *** 没有规则可以创建“/usr/lib/x86_64-linux-gnu/XXXXXX.so”需要的目标“XXX”暴力解法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.问题背景

在我们对项目进行编译时,可能会遇到make: *** 没有规则可以创建“/usr/lib/x86_64-linux-gnu/XXXXXX.so”需要的目标,这个问题,导致这个问题的原因大多来源于我们对某个项目的某个依赖库(卸载后)重新进行了源码编译,一般导致两种情况:

    1. 在原本的共享链接库路径下找不到原本的链接库文件.so
    1. 该文件断开链接

2.解决问题

我们进入到目标共享链接库目录下(当前为/usr/lib/x86_64-linux-gnu/),通过ls命令查看:
如图,一种情况为该目录下不存在所需的“xxx.so”文件,另一种情况即该文件存在,但显示为红色,如图中“libopencv_aruco.so”文件,红色即显示该链接为断开状态
在这里插入图片描述

解决步骤一:

通过locate命令查找该.so文件的存储位置

locate 'xxx.so'

如下图,当前寻找的.so文件为“libopencv_aruco.so”文件(即上图中红色链接库文件其一,链接为断开状态),可以看到该文件存在于/usr/local/lib中
在这里插入图片描述
!!:当locate在其他目录(一般为/usr/local/lib)找到.so文件后,不论是两种情况的哪一种(在报错目标目录不存在/存在但链接断开),均可通过一条shell命令进行解决(如上图)
即:

sudo ln -s -f -i /usr/local/lib/xxx.so /报错目录/xxx.so

语法为:

ls -s -f -i 源文件 目标文件

这也是标题的所说的“暴力”,即只要原始共享链接库文件存在,则不分错误情况,一步到位

关于ln命令,-s参数相信大家都比较熟知,即为目标文件创建软链接,而这里又加入的’-f’、’-i’参数才是暴力解决的关键:

-f:强制创建链接,即使目标文件已经存在
–i:交互模式,若目标文件已经存在,则提示用户确认进行覆盖

操作完成后,再次键入ls命令,可以看到该.so文件已经存在且正常,接下来,正常的去对项目进行编译即可。
在这里插入图片描述

解决步骤二:若通过locate命令查找不到源.so文件

1:查看该库是否已经安装/编译
2. 查看版本是否对应

对一第一种情况,如发现该库根本没有安装,找到指定版本安装就好了
对于第二种情况:
比如你的项目需要libopencv-core.so.3.2.0,但你的opencv是其实并不是3.2版本的,这样直接去源码编译opencv3.2就行了,编译过程中就会看到相对应的.so文件生成。

这篇关于ln命令之make: *** 没有规则可以创建“/usr/lib/x86_64-linux-gnu/XXXXXX.so”需要的目标“XXX”暴力解法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/717334

相关文章

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

IntelliJ IDEA2025创建SpringBoot项目的实现步骤

《IntelliJIDEA2025创建SpringBoot项目的实现步骤》本文主要介绍了IntelliJIDEA2025创建SpringBoot项目的实现步骤,文中通过示例代码介绍的非常详细,对大家... 目录一、创建 Spring Boot 项目1. 新建项目2. 基础配置3. 选择依赖4. 生成项目5.

nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

《nginx-t、nginx-sstop和nginx-sreload命令的详细解析(结合应用场景)》本文解析Nginx的-t、-sstop、-sreload命令,分别用于配置语法检... 以下是关于 nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析,结合实际应

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录

Linux在线解压jar包的实现方式

《Linux在线解压jar包的实现方式》:本文主要介绍Linux在线解压jar包的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux在线解压jar包解压 jar包的步骤总结Linux在线解压jar包在 Centos 中解压 jar 包可以使用 u

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与