使用cmake 构建构建新项目的时候,编译提示库找不到怎么办?

news2024/11/19 14:41:22

昨天帮其他部门同事解决Linux下Qt编译找不到Qt 依赖库 core的问题。过程很有特征性,可以推广到Linux下使用cmake构建项目时找不到库文件的广泛性问题。

先上图,结合事情经过讲述:

事情经过:

  •  这里给大家介绍第一个重点: Qt在6.0之后,对很多的常用库做了修改,所以经常会出现5.9的代码在新版本上编译不起来的问题,这件事在博主去年想用Qt自己写一个xml文件的格式化输出修改的小工具时候,发现的。官网的版本更新里面介绍了这件事情,但是网络上关于这点的讨论却很少。这里提一下希望大家技术选型时不要再踩坑。

  • 信息有限,在添加路径之后,还是找不到,因此考虑是否是根本就没有,所以找不到。
  • 故而采取重装大法,在再次安装的时候,勾选core 库,同样的插一嘴:搞运维和测试的同学,在部署环境和搭建实验室时,一定要和研发同学沟通,系统版本、软件依赖版本、组件包含多少东西。
  • 不要觉得博主唧唧歪歪。这都是血泪教训,当年博主被叫到长沙时,运维实施的同学信誓旦旦的说实验室已经搭建完成了。可是博主到了之后,发现服务器装的redhead连 c++开发环境都没有。也没有可视化界面,还要博主重头刻启动盘安装。然后惠普服务器还发现做不了raid5。叫来厂家还不行,博主就在长沙冬天冰冷的项目部里解决问题。o_0。

  •  项目如果可以,请放在根目录下。
  • 这是因为很多时候,home下面创建的用户,自身的环境变量和root的不一致。而在运行时候,如无特殊指定,程序是会交给root下的shell 进程来fork新的子进程执行的。这时候会出现root下的PATH宏中不包含正确的依赖路径,从而导致编译或者运行错误。
  • 这样的错误包括但不限于:
    • Python 多版本问题(可以用pyenv解决)
    • libc.so多版本问题(可以用忍者解决)
    • 依赖库问题(可以指定位置解决)

 

  • cmake 的分支路线是逐层的找到下层中的cmake,有点像是makefile找子文件夹中的makefile。
  • include subdir/Makefile
    

好了,到此事件结束。让我们总结前,扩充一点:

  • 在CMake中,find_package和find_library都是用于查找依赖库的命令,但它们的作用略有不同。

  • find_package用于查找安装在系统上的库,它会在系统路径和CMAKE_PREFIX_PATH中查找库的头文件和库文件,并将它们添加到CMake的变量中,以便在后续的编译过程中使用。同时,它还会检查库的版本和依赖关系,以确保库的正确性。
  • find_library则是用于查找指定名称的库文件,它会在指定的路径中查找库文件,并将其添加到CMake的变量中。它不会检查库的版本和依赖关系,因此需要手动指定库的路径和版本信息。

  • 总的来说,find_package更适用于查找系统安装的库,而find_library更适用于查找自定义的库文件。

 总结:cmake编译时报错库文件找不到的原因和对应的各种解决方案

当使用CMake进行编译时,可能会遇到库文件找不到的错误。这通常是由于以下原因之一导致的:

  1. 库文件未正确安装或未正确配置路径。
  2. CMakeLists.txt文件中未正确指定库文件路径。
  3. 编译器未正确配置库文件路径。

针对这些问题,可以采取以下解决方案:

  1. 确保库文件已正确安装并配置路径。可以使用命令行工具或IDE来检查库文件是否存在,并确保路径正确。

  2. 在CMakeLists.txt文件中正确指定库文件路径。可以使用以下命令来指定库文件路径:

link_directories(/path/tobrary)
  1. 或者使用 message命令打印 PATH的内容。查看到底有无正确加载。
message("PATH = $ENV{PATH}")
  1. 在编译器中正确配置库文件路径。可以使用以下命令来配置库文件路径:
-L/path/tobrary

以上是一些常见的解决方案,但具体解决方案可能因具体情况而异。如果以上解决方案无法解决问题,请提供更多详细信息,留在评论区,以便博主更好地帮助您解决问题。

解决稀奇古怪的问题也是对博主的一种成长。

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

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

相关文章

秘塔写作猫

秘塔写作猫是集AI智能写作、多人协作、改写润色、文本校对等功能为一体的AI原生创作平台,可以帮助不同群体大幅提升写作效率和生产力。 接下来小编就带大家了解一下该软件具体的一些功能,不论你是学生、上班族还是自媒体从业者等,该工具绝对可…

箭头函数与普通的函数有什么区别-M

箭头函数与普通的函数有什么区别 1、写法不同 在 js 中,像命名式函数、函数表达式都称为普通函数。对于普通函数,需要用function关键字来声明。而箭头函数则不需要使用function关键字,在箭头前面的括号里面写参数,后面的大括号里…

Linux 安装MySQL-5.7.30

1.官网下载MySQL 进入官网https://www.mysql.com/ 从下载页面下载社区版本其中社区版本免费,免费的午餐不提供技术支持. 页面中MySQL Enterprise Edition是企业版,企业版收费但是会提供技术支持, 点击图中红框下载社区版本 选择Download Arc…

AC,AP以及三阶段项目

特点:access:连接终端设备 只能通过1个vlan trunk:交换机与交换机相连 可以通过多个vlan 共同特点:交换机的端口收发数据的规则: 收:如果收到的数据,没有携带任何标签,则使用该端口…

01SpringCloudRibbon负载均衡

Ribbon负载均衡 Ribbon Eureka帮我们集成了负载均衡组件:Ribbon,简单修改代码即可使用。 什么是Ribbon:客户端负载均衡组件 开启负载均衡 1、Eureka中已经集成了Ribbon,所以我们无需引入新的依赖,直接修改代码。 2、…

Redis的主从集群搭建与配置

文章目录 Redis主从集群模式搭建过程分级管理容灾冷处理 Redis主从集群模式 Redis的集群模式 主从复制模式:利用主从复制原理,一主多从架构。读写分离,主节点可读可写,从节点只能提供读服务。哨兵模式:哨兵实现了自动化…

Vue 3 + Element Plus 简单用法

Element Plus: A Desktop UI toolkit for Vue.js 即 Vue 桌面 UI 工具包 基于 Vue 2 的组件库和基于 Vue 3 的组件库安装方法不同,基于 Vue 3 的组件库叫做 Element Plus。 MDBootstrap 与 Element UI 区别: MD Bootstrap vs ElementUI: W…

如何在金融企业推进故障演练?中国人寿分阶段实践总结

一分钟精华速览 越来越多企业正在通过故障注入和演练的方式提升系统可靠性,这其中金融行业的应用较为特殊。一方面其可靠性要求比非涉账类系统更高;另一方面金融行业有更加严格的监管要求,如客户、账目等信息都有严格约束。加之金融系统较其…

ActiveMQ基础学习简单记录

ActiveMQ基础学习简单记录 JMS是什么JMS消息模型JMS Message Type Activemq安装概念强化JMS的跨平台性JMS通用接口JMS希望达到的目标是什么 Activemq发送消息的三种模式至少一次至多一次精确一次可重复确认模式小结 Activemq支持众多协议Activemq支持的定时消息,延迟消息,优先级…

【C++技能树】类和对象的使用 --初始化列表,static,友元,内部类,匿名对象的理解与使用

Halo,这里是Ppeua。平时主要更新C语言,C,数据结构算法…感兴趣就关注我bua! 类和对象的使用 0. 初始化列表explicit关键字 1.Static静态成员变量2.友元2.1.友元函数2.2.友元类 3.内部类4.匿名对象4.匿名对象至此初始化列表,static…

【Linux】2. Shell运行原理与Linux权限操作

专栏导读 🍁作者简介:余悸,在读本科生一枚,致力于 C方向学习。 🍁收录于 C 专栏,本专栏主要内容为 C 初阶、 C 进阶、 STL 详解等,持续更新中! 🍁相关专栏推荐&#xff1…

Cloud Studio 有“新”分享

GitHub仓库推荐 Awesome Open Source Applications - 收集了各种开源应用程序,包括 Web 应用、桌面应用、移动应用等。Cloud Studio 一键运行 Free for Dev - 收集了各种免费的开源应用程序和工具,包括 Web 应用、桌面应用、移动应用等。Cloud Studio 一…

kaggle经典赛 | IEEE欺诈检测竞赛金牌方案分享

https://www.kaggle.com/competitions/ieee-fraud-detection 赛题背景 想象一下,站在杂货店的收银台,身后排着长队,收银员不那么安静地宣布你的卡被拒绝了。在这一刻,你可能没有考虑决定你命运的数据科学。 尴尬,并…

一文搞定验证码(上部分)

1.背景 目前收到反馈,存在一类用户,在利用会员权益大量进行二次销售;而且还是自动进行操作的. 那么意味着他们有一个自动平台在对我们的商品进行二次销售. 这是就该我们的主角登场了. 验证码模块可以有效防止机器人刷接口 2.开源验证码框架 通过在网上查找资料, 发现了几个验…

C++:采用哈希表封装unordered_map和unordered_set

目录 一. 如何使用一张哈希表封装unordered_map和unordered_set 二. 哈希表迭代器的实现 2.1 迭代器成员变量及应当实现的功能 2.2 operator函数 2.3 operator*和operator->函数 2.4 operator!和operator函数 2.5 begin()和end() 2.6哈希表迭代器实现代码 三. unord…

渗透测试--6.2.mdk3攻击wifi

前言 本次依然使用Kali虚拟机系统,win11主机,网卡Ralink 802.11 配合mdk3进行wifi伪造、连接设备查看、解除认证攻击。本次实验只用于学习交流,攻击目标为自家的手机热点,请勿违法使用! 目录 前言 1.Deauth攻击原…

Electron简介、安装、实践

本文中的所有代码均存放在https://github.com/MADMAX110/my-electron-app Electron是什么? Electron是一个开源的框架,可以使用JavaScript, HTML和CSS来构建跨平台的桌面应用程序。Electron的核心是由Chromium和Node.js组成,它们分别提供了渲…

【springboot 开发工具】接口文档我正在使用它生成,舒坦

前言 先来描述下背景:由于新公司业务属于自研产品开发,但是发现各产品业务线对于接口文档暂时还是通过集成Swagger来维护,准确来说是knife4j(Swagger的增强解决方案)。但是对于5年的后端开发老说,早就厌倦…

Java-线程安全的四个经典案例和线程池

单例模式 有些对象,在一个程序中应该只有唯一 一个实例(光靠人保证不靠谱 借助语法来保证) 就可以使用单例模式 在单例模式下 对象的实例化被限制了 只能创建一个 多了的也创建不了 单例模式分为两种:饿汉模式和懒汉模式 饿汉模式…

[Java基础]—SpringBoot

Springboot入门 Helloworld 依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.4.RELEASE</version> </parent><dependencies><depend…