记录 三方库环境配置

记录开发环境下如何设置三方库,方便后期随时翻阅快速解决问题,主要是实际开发中,个人认为比较好用的方法。

分析

动态库、静态库的区别必须先了解!如 .lib .dll .a .so 否则影响下文的理解
无论哪种,对于三方库的调用无非两步:
1 源码中能找到三方库头文件路径、库路径。设置错误会造成各种编译报错找不到定义
2 执行程序能找到所链接的库路径。设置错误会无法运行异常结束

编译期库设置

第一步比较简单的,各大IDE都有固定方式,Windows和Linux环境方法无区别。库包含进来就可以,以ffmpeg库为例,其他库类推:

Qt方式:

//库路径
win32: LIBS += /home/zxt/ffmpeg-4.3.4/lib/ -lavcodec
win32: LIBS += /home/zxt/ffmpeg-4.3.4/lib/ -lavdevice
win32: LIBS += /home/zxt/ffmpeg-4.3.4/lib/ -lavfilter
win32: LIBS += /home/zxt/ffmpeg-4.3.4/lib/ -lavformat
win32: LIBS += /home/zxt/ffmpeg-4.3.4/lib/ -lavutil
win32: LIBS += /home/zxt/ffmpeg-4.3.4/lib/ -lpostproc
win32: LIBS += /home/zxt/ffmpeg-4.3.4/lib/ -lswresample
win32: LIBS += /home/zxt/ffmpeg-4.3.4/lib/ -lswscale
//头文件路径
INCLUDEPATH += /home/zxt/ffmpeg-4.3.4/include
DEPENDPATH += /home/zxt/ffmpeg-4.3.4/include

CMake方式:

//Add FFmpegLib Path 
INCLUDE_DIRECTORIES(/home/zxt/ffmpeg-4.3.4/include)
LINK_DIRECTORIES(/home/zxt/ffmpeg-4.3.4/lib)
link_libraries(-lavcodec -lavformat -lavfilter -lavutil -lswscale -lswresample -lavdevice -lpostproc)

VS方式:
Windows环境项目属性页中,附加包含目录:设置头文件路径; 附加库目录、附加依赖项:设置库路径

以上设置完成,编译可以通过。重点是如何让执行程序能找到链接库正常运行起来。

运行期库设置

总而言之,让执行程序能链接到所依赖的三方库,设置库路径知道要链接的三方库在哪里!

Windows环境

方式1:
一般将依赖的dll文件放在执行程序同一目录就能直接找到(正常做法);
方式2:
dll路径设置为全局环境变量(此种方式不建议,有一个库就设置一个全局变量不太合适,但经常用到的库可以,如ffmpeg库,个人经常使用命令行测试)

Linux环境

因为系统差异,so库放在执行程序同一目录是无效的,方法最简洁的不能但适用于Linux环境。只能退而求其次,通过设置全局变量的方式。

方式1:
打开终端,导入需要的so库路径后再运行程序。这种只对当前终端有效,关闭再打开新的终端需要重新设置。

//导入so库所在路径
export LD_LIBRARY_PATH=/home/zxt/ffmpeg-4.3.4/lib
//执行
sudo ./test

方式2:
配置文件 /etc/ld.so.conf 中,添加用到的so库路径,然后别忘记sudo ldconfig生效。
按照下图理解,可以直接在该配置文件中添加一行,内容为so库路径。也可以在/etc/ld.so.conf.d文件夹中新创建一个conf文件,内容为so路径,能自动索引到。
so库

方式3:
编译程序的时候配置路径参数,有此方法,但不喜欢不记录

另外,如果环境里有多个不同版本库,可以 ldd+程序名 查看链接的到底是哪个库

猜你喜欢

转载自blog.csdn.net/T__zxt/article/details/127005192