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

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

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


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


事情经过:

4333cba16337ce6f47f6151fa0d3158a_df0bfadc2af546cf913e7948f665f802.png

image.png

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


4d0b525cfdd5df9d61d2c0e82923de25_ee69a73dbb514326adec4e306140b169.png

6760f8a78ccddd462fd58dcf7166550f_399461699ce54a278f7a8040e9fddf38.png

6771ae57c5a9e65f7c8aeed015f392c1_9317dc423d824dcbbfa33e2477dd03ac.png

信息有限,在添加路径之后,还是找不到,因此考虑是否是根本就没有,所以找不到。

故而采取重装大法,在再次安装的时候,勾选core 库,同样的插一嘴:搞运维和测试的同学,在部署环境和搭建实验室时,一定要和研发同学沟通,系统版本、软件依赖版本、组件包含多少东西。

不要觉得博主唧唧歪歪。这都是血泪教训,当年博主被叫到长沙时,运维实施的同学信誓旦旦的说实验室已经搭建完成了。可是博主到了之后,发现服务器装的redhead连 c++开发环境都没有。也没有可视化界面,还要博主重头刻启动盘安装。然后惠普服务器还发现做不了raid5。叫来厂家还不行,博主就在长沙冬天冰冷的项目部里解决问题。o_0。

6fd9c615aaa0e5b3f1a061e6e7c3584b_3f4916ae54a84029b0eaaba1ef58e4b2.png


项目如果可以,请放在根目录下。

这是因为很多时候,home下面创建的用户,自身的环境变量和root的不一致。而在运行时候,如无特殊指定,程序是会交给root下的shell 进程来fork新的子进程执行的。这时候会出现root下的PATH宏中不包含正确的依赖路径,从而导致编译或者运行错误。

这样的错误包括但不限于:

Python 多版本问题(可以用pyenv解决)

libc.so多版本问题(可以用忍者解决)

依赖库问题(可以指定位置解决)

e9a9ed7f94fd22901cf0079911901761_8be2d5f32742403caa52ac2e471aadee.png

190ea176e47ae2436bdef0fdb308a9a1_ad8c29f32905429f803eb11b663ed846.png

576ef31b6ce395525d6ac50aeba7a0f7_bf20e7fe28c949c5a8d7eb89085a81bf.png

864354b77efbff6c7bfd57d6ec6e9430_f0cac2e8584e4aecbdb017d5a9e1fb2a.png

9b1c715bc5cac19cb2f418c6a3326059_6052d38f3fcf41a5a394f0274fc06fc4.png

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

include subdir/Makefile

ac70729d743a23d1355cd8b121ec6a5a_566bdb56a9b24229bd30f1448a245e8e.png

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


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


find_package用于查找安装在系统上的库,它会在系统路径和CMAKE_PREFIX_PATH中查找库的头文件和库文件,并将它们添加到CMake的变量中,以便在后续的编译过程中使用。同时,它还会检查库的版本和依赖关系,以确保库的正确性。

find_library则是用于查找指定名称的库文件,它会在指定的路径中查找库文件,并将其添加到CMake的变量中。它不会检查库的版本和依赖关系,因此需要手动指定库的路径和版本信息。

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

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

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


库文件未正确安装或未正确配置路径。

CMakeLists.txt文件中未正确指定库文件路径。

编译器未正确配置库文件路径。

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


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


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


link_directories(/path/tobrary)

或者使用 message命令打印 PATH的内容。查看到底有无正确加载。

message("PATH = $ENV{PATH}")

在编译器中正确配置库文件路径。可以使用以下命令来配置库文件路径:

-L/path/tobrary

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


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

目录
相关文章
|
6月前
|
程序员 API 数据库
【Cmake工程 库相关教程 】深入理解CMake工程C/C++ 库管理技巧
【Cmake工程 库相关教程 】深入理解CMake工程C/C++ 库管理技巧
153 1
|
6月前
|
开发框架 Unix Linux
深度探索:Qt CMake工程编译后的自动打包策略
深度探索:Qt CMake工程编译后的自动打包策略
348 0
|
1月前
|
存储 编译器 Linux
1.7.1 目标代码文件、可执行文件和库
C编程将源代码文件转换为可执行文件,此过程分为编译与链接两步。首先,编译器将源代码转化为中间代码,再由链接器将其余代码融合,最终生成可执行文件。此方法有助于程序模块化,允许独立编译各模块并在后期使用链接器整合,避免因单一模块变动导致整体重编。同时,链接器还会将用户程序与预编译库代码结合,生成完整程序。目标代码文件在链接前缺少启动代码及库函数,这些由链接器在最后阶段补充完整。
56 7
|
jenkins 持续交付
Manage Jenkins管理界面提示“依赖错误: 部分插件由于缺少依赖无法加载...“问题解决办法
Manage Jenkins管理界面提示“依赖错误: 部分插件由于缺少依赖无法加载...“问题解决办法
1275 0
Manage Jenkins管理界面提示“依赖错误: 部分插件由于缺少依赖无法加载...“问题解决办法
|
5月前
|
开发者
CMake 命令行使用指南:创建构建目录与编译项目
CMake 命令行使用指南:创建构建目录与编译项目
256 0
|
6月前
|
测试技术
使用CLion创建Cmake项目,使用GoogleTest和GoogleMock对代码进行测试
使用CLion创建Cmake项目,使用GoogleTest和GoogleMock对代码进行测试
150 3
|
6月前
|
存储 缓存 Unix
CMake基础(8)包含第三方库
CMake基础(8)包含第三方库
49 1
|
6月前
|
算法 IDE Linux
【CMake 小知识】CMake中的库目标命名和查找策略解析
【CMake 小知识】CMake中的库目标命名和查找策略解析
270 1
|
6月前
C/C++test两步完成CMake项目静态分析
通过将C/C++test集成到CMake项目中,并根据项目的需要进行配置,可以在两步内完成CMake项目的静态分析。这样可以帮助开发人员及时发现并修复潜在的代码问题,提高代码质量和可靠性。
57 0
|
6月前
|
程序员 Linux C语言
【cmake 项目依赖冲突】CMake进阶:优雅解决目标依赖和安装问题
【cmake 项目依赖冲突】CMake进阶:优雅解决目标依赖和安装问题
411 0