赞
踩
下载好的文件qt安装文件是在windows上的,那么就需要将可执行文件放到linux上执行。
这里是通过vmware的共享文件夹 实现的,将windows下的D:\linuxgongxiang 文件夹下的会自动映射到linux 下的 /mnt/hgfs/linuxgongxiang
./qtcreator 无法打开 qtcreator
sudo ./qtcreator 正确打开 qtcreator
sudo chown -R hunandede:hunandede ~/.config/
之前我们在ubutun 上的build 的ffmpeg 的路径是:
/home/hunandede/ffmpeg_build
其中bin 下放的是 x265的可执行文件
include 目录下放的是 .h文件
lib 下放的是 动态库文件
因此要在 .pro文件中设置 INCLUDEPATH,表示我在代码中使用到的 头文件 会在如下的路径中查找
还要在.pro 文件中,设置LIBS,表示我运行时要使用的 静态库 或者 动态库 会在如下的文件中查找。
当前测试中,由于ffmpeg 是我们自己build 的 静态库,因此写法如下:
- TEMPLATE = app
- CONFIG += console
- CONFIG -= app_bundle
- CONFIG -= qt
-
- SOURCES += \
- main.c
-
- INCLUDEPATH += /home/hunandede/ffmpeg_build/include
-
- LIBS += /home/hunandede/ffmpeg_build/lib/libavcodec.a \
- /home/hunandede/ffmpeg_build/lib/libavdevice.a \
- /home/hunandede/ffmpeg_build/lib/libavfilter.a \
- /home/hunandede/ffmpeg_build/lib/libavformat.a \
- /home/hunandede/ffmpeg_build/lib/libavutil.a \
- /home/hunandede/ffmpeg_build/lib/libswresample.a \
- /home/hunandede/ffmpeg_build/lib/libswscale.a
- #include <stdio.h>
-
- // 包含ffmpeg头⽂件
-
- #include "libavutil/avutil.h"
-
- int main()
- {
- printf("Hello World!\n");
- printf("Hello FFMPEG, version is %s\n", av_version_info());
- return 0;
- }
结果:
- 11:04:37: Starting /home/hunandede/build-demo01_c-Desktop_Qt_5_12_10_GCC_64bit-Debug/demo01_c ...
- Hello World!
- Hello FFMPEG, version is 7.0
LIBS += /home/hunandede/ffmpeg_build/lib/libavcodec.so \
/home/hunandede/ffmpeg_build/lib/libavdevice.a \
/home/hunandede/ffmpeg_build/lib/libavfilter.a \
/home/hunandede/ffmpeg_build/lib/libavformat.a \
/home/hunandede/ffmpeg_build/lib/libavutil.a \
/home/hunandede/ffmpeg_build/lib/libswresample.a \
/home/hunandede/ffmpeg_build/lib/libswscale.a
--prefix选项是配置安装的路径,一般 .h文件,静态库,动态库文件都会在这个目录下。
--bindir 选项指定二进制文件的安装位置,这里的二进制文件定义为可以被用户直接执行的程序
- INCLUDEPATH += /home/hunandede/ffmpeg_build/include
-
- LIBS += /home/hunandede/ffmpeg_build/lib/libSDL2.a
- #include <stdio.h>
-
- // 包含ffmpeg头⽂件
-
- #include "libavutil/avutil.h"
- #include <SDL2/SDL_version.h>
- #include <SDL2/SDL_log.h>
-
- int main()
- {
- printf("Hello World!\n");
- printf("Hello FFMPEG, version is %s\n", av_version_info());
-
- SDL_version compiled;
- SDL_version linked;
-
- SDL_VERSION(&compiled);
- SDL_GetVersion(&linked);
-
- SDL_Log("We compiled against SDL version %u.%u.%u ...\n",
- compiled.major, compiled.minor, compiled.patch);
- SDL_Log("But we are linking against SDL version %u.%u.%u.\n",
- linked.major, linked.minor, linked.patch);
-
- return 0;
- }
音视频开发4 FFmpeg windows 环境搭建,QT 安装,动态库的搜索路径-CSDN博客
在这个博客中,有更多的加载静态库和动态库的方法。如果在开发中遇到问题,请也要参考这个文章。
其核心区别是:如果指定的是动态库,例如:libavcodec.dll.a,还需要指定真正的使用到的动态库的路径,因为.dll.a 的作用是:用于MinGW编译器中(MinGW gcc/g++,MinGW则是指Minimalist GNU for Windows的缩写),并不是真正的dll的
.dll.a , ffmpeg中的 .lib 并不存放真正的函数代码本体。
只是包含了函数所在的DLL文件和文件中 函数位置的信息(索引),函数实现代码由运行时加载在进程空间中的DLL提供
因此还需要指定真正使用的 dll 的具体位置,在这之前,还需要了解dll 在windows 的加载顺序问题。下图的写法是将要用到的dll 的
静态库:提供2分文件:
(1).h 文件【包含lib中输出的类,以及函数原型】, 需要将该文件包含如“程序源文件”中
(2).lib静态文件【包含对函数的声明与实现】 编译期间使用, 最终放入exe执行文件中,且最终的exe文件较大;
因此:自己可以逐步把自己用gcc编译源文件生成的obj文件通过tlib命令加入到一个lib文件中,也可以把lib文件内的obj文件进行删除操作,还可以把内部的obj文件给提取出来。
动态库:提供3分文件:
(1).h文件【包含dll输出类型,以及函数原型】, 需要将文件包含入“程序源文件”中
(2).lib静态导入文件【只包含对实现部分dll的导出声明】是编译器生成dll时自动生成的lib文件。
(3).dll动态库【函数的实现部分】 “编译阶段”使用lib, 运行期间使用dll,因此如果要通过源码的编译,则需要lib库引入,如果要后续生成的执行文件运行起来,则需要dll放在exe的同目录下,最终的exe文件较小;
静态库的lib:即包括函数实现的声明索引信息,也有函数实现内容; 其实质是:多个obj文件的集合, obj文件是源码cpp文件“编译”后生成的obj。因此在编译静态库是根本不会出现“链接问题错误”;
动态库的lib:是在【编译-连接】生成dll后生成的文件。只包含函数实现的声明索引信息,不是obj文件的集合,只记录了dll文件中的函数的入库和地址信息,dll文件是函数的具体实现部分。
里面有三种文件后缀分别为:.lib、.def、.dll.a 。
.def:暂时还不太清楚。
.lib:用于MSVC编译器中 (MSVC 微软自己的编译器)
.dll.a:用于MinGW编译器中(MinGW gcc/g++,MinGW则是指Minimalist GNU for Windows的缩写)
这三个文件里面并不存放真正的函数代码本体。
只是包含了函数所在的DLL文件和文件中 函数位置的信息(索引),函数实现代码由运行时加载在进程空间中的DLL提供
.a 就是 linux 中的静态库
.so 就是 linux 中的动态库
exe在寻找dll文件时,大概按照以下优先级顺序去查找(这里只列出了大概的搜索路径,并没有写全):
exe所在的目录
Windows的System目录
C:/Windows/System
C:/Windows/System32
Windows目录
C:/Windows
环境变量Path中的路径
所以可以考虑将%FFMPEG_HOME%/bin目录配置到Path变量中
置于如何配置Windows的环境变量Path,这是基本开发常识了,就不再讲解了
第1种方式需要在每一个Qt程序中都拷贝一份FFmpeg的dll文件,
第2~4种方式可以让多个Qt程序共用同一份FFmpeg的dll文件。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。