使用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

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


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

目录
相关文章
|
7月前
|
程序员 API 数据库
【Cmake工程 库相关教程 】深入理解CMake工程C/C++ 库管理技巧
【Cmake工程 库相关教程 】深入理解CMake工程C/C++ 库管理技巧
173 1
|
7月前
|
开发框架 Unix Linux
深度探索:Qt CMake工程编译后的自动打包策略
深度探索:Qt CMake工程编译后的自动打包策略
409 0
|
6月前
|
开发者
CMake 命令行使用指南:创建构建目录与编译项目
CMake 命令行使用指南:创建构建目录与编译项目
318 0
|
7月前
|
测试技术
使用CLion创建Cmake项目,使用GoogleTest和GoogleMock对代码进行测试
使用CLion创建Cmake项目,使用GoogleTest和GoogleMock对代码进行测试
182 3
|
7月前
|
存储 缓存 Unix
CMake基础(8)包含第三方库
CMake基础(8)包含第三方库
61 1
|
7月前
|
程序员 Linux C语言
【cmake 项目依赖冲突】CMake进阶:优雅解决目标依赖和安装问题
【cmake 项目依赖冲突】CMake进阶:优雅解决目标依赖和安装问题
518 0
|
7月前
|
C++ 计算机视觉
Visual Studio新项目快速配置已有项目中编译好的C++第三方库的方法
Visual Studio新项目快速配置已有项目中编译好的C++第三方库的方法
173 1
|
C++ 计算机视觉
解决方案-Visual Studio设置通用配置(包含路径+依赖库)
解决方案-Visual Studio设置通用配置(包含路径+依赖库)
404 0
|
Python
python导出项目所依赖的所有的库文件以及安装
python导出项目所依赖的所有的库文件以及安装
206 0
|
XML Android开发 数据格式

热门文章

最新文章