Libx265在windows+linux下并并的编译
1. Windows编译
1.1 系统环境
Win7 64位,旗舰版 SP1
1.2 需要工具
(1) cmake-3.5.0-rc1-win32-x86.msi
直接安装即可。
(2) mercurial-3.7.1-x86.msi
直接安装即可。
(3) tortoisehg-3.2.4-x64.msi
直接安装即可。我电脑是64位的,刚开始下载的32位程序,发现用不了。
32位下载 64位下载
(4) vld-2.5-setup.exe
直接安装即可绝族迹。
(5) yasm-1.3.0-win32.exe
将名字修改为yasm.exe,然后放到system32中。
1.3 下载代码
x265-src.tar.gz
1.4 编译
将上面5个工具安装完之后,就可以编译了。编译很简单。
进入到代码的build目录,找到你使用的visual studio的目录,进去双击执行build-all.bat,然后会弹出CMake的配置对话框。
点击“Generate”,当看到“Configuring done 、Generating done”时,说明vs的工程文件已经生成好了。
此时,把CMake关闭掉,cmd对话框还会继续编译穗态,直到编译完毕,cmd会自动退出。
‘贰’ 怎么编译windows上libx264静态库
mingw编译出来的静态库后缀名为.a,编译出来的动态库的导入库后缀名为.dll.a,而在windows下后缀名为.lib的库可能是静态库也可能是动态库的导入库。 mingw编译出来的动态库的导入库可以直接在vc中直接使用,例如 #pragma comment(lib, "libx264
‘叁’ 在ARM上运行交叉编译后的opencv文件,没有输出
一、交叉编译opencv
构造:
下载:各个库的下载可以直接搜名字到官网下载
几个关键解释:
“--prefix=” 后边跟make install时的位置,本例中,libz在make install时将安装到/usr/arm-linux-gnueabihf中
“--host=” 后边跟arm-linux表明使用的是ARM环境
有configure的才能进行configure配置
4)所有的makefile修改类似
Libz的交叉编译
第一步:# ./configure --prefix=/usr/arm-linux-gnueabihf --shared
第二步:修改makefile,主要有下边几个,修改的时候通篇参照即可
CC=arm-linux-gnueabihf-gcc
AR=arm-linux-gnueabihf-ar rc
RANLIB=arm-linux-gnueabihf-ranlib
STRIP = arm-linux-gnueabihf-strip
如果有ARCH的话,ARCH=ARM
第三步:#sudo make
#sudo make install
Libjpeg的交叉编译
第一步:#./configure --host=arm-linux --prefix=/usr/arm-linux-gnueabihf --enable-shared --enable-static CC=arm-linux-gnueabihf-gcc
第二步:参考1)中方法修改makefile
第三步:#sudo make
#sudo make install
Libpng的交叉编译
第一步:#./configure --host=arm-linux --prefix=/usr/arm-linux-gnueabihf --enable-shared --enable-static CC=arm-linux-gnueabihf-gcc
第二步:参考1)中方法修改makefile
第三步:#sudo make
#sudo make install
Yasm的交叉编译
第一步:#./configure --host=arm-linux --prefix=/usr/arm-linux-gnueabihf --enable-shared --enable-static
第二步:修改makefile
第三步:#sudo make
#sudo make install
Libx264的交叉编译
第一步:#CC=arm-linux-gnueabihf-gcc ./configure --enable-shared --host=arm-linux --disable-asm --prefix=/usr/arm-linux-gnueabihf
第二步:修改config.mak里的参数,因为makefile要调用config.mak,所以修改方法同makefile
第三步:#sudo make
#sudo make install
Libxvid的交叉编译
第一步:首先切换目录 #cd build/generic
第二步:#./configure --prefix=/usr/arm-linux-gnueabihf --host=arm-linux --disable-assembly
第三步:#sudo make
#sudo make install
ffmpeg的交叉编译
第一步:
./configure --enable-cross-compile --target-os=linux --cc=arm-linux-gnueabihf-gcc --arch=arm --enable-shared --disable-static --enable-gpl --enable-nonfree --enable-ffmpeg --disable-ffplay --enable-ffserver --enable-swscale --enable-pthreads --disable-yasm --disable-stripping --enable-libx264 --enable-libxvid --extra-cflags=-I/usr/arm-linux-gnueabihf/include --extra-ldflags=-L/usr/arm-linux-gnueabihf/lib --prefix=/usr/arm-linux-gnueabihf
第二步:修改makefile文件
第三步:#sudo make
#sudo make install
第四步:将ffmpeg加入pkg-config
执行#sudo gedit /etc/bash.bashrc,在末尾加入
export LD_LIBRARY_PATH=/usr/arm-linux-gnueabihf/lib/
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/arm-linux-gnueabihf /lib/pkgconfig
export PKG_CONFIG_LIBDIR=$PKG_CONFIG_LIBDIR:/usr/arm-linux-gnueabihf /lib/
完毕后使用命令:#source /etc/bash.bashrc
或者单独使用三个export,不过寿命只在一个终端中,终端关闭时就失效。
几个关键解释:--extra-flags指向xvid的安装路径,--extra-ldflags指向x264的路径
安装cmake-gui
执行:#sudo apt-get install cmake-qt-gui
Opencv的交叉编译
第一步:修改opencv/platflrms/linux/目录下的arm-gnueabi.toolchain.cmake,将其所有删掉,写入:
set( CMAKE_SYSTEM_NAME Linux )
set( CMAKE_SYSTEM_PROCESSOR arm )
set( CMAKE_C_COMPILER arm-linux-gnueabihf-gcc )
set( CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++ )
第二步:在opencv目录下新建build目录,进入build目录,执行命令:
#cmake -DCMAKE_TOOLCHAIN_FILE=../platforms/linux/arm-gnueabi.toolchain.cmake ../
这时,要保证出现:
第三步:使用cmake-gui打开CMakeCache.txt,去掉所有的无关项,修改CMAKE_INSTALL_PREFIX,来确定make install的目录
第四步:#sudo make
#sudo make install
可能出现的错误:
opencv编译不通过,出现skip之类的,说明ffmpeg没编译好,或者其编译好了,但是pkg-config没有设置好,一定要设置好其环境
前边几步不通过的话,看看命令有没有少,或者有没有修改好makefile
在arm上使用时,一种方法时直接将编译好的opencv目录下的lib文件拷贝到开发板对应的/lib目录下,其他或者拷贝到自己指定的目录,并设置好环境变量即可使用
‘肆’ x264linux
dh-nvr1104hs鍙傛暟锛
澶у崕DH-NVR1104HS-HDS2
锘烘湰鍙傛暟
锘烘湰鍙傛暟
浜у搧绫诲瀷 缃戠粶纭鐩桦綍镀忔満
澶勭悊鍣 宸ヤ笟绾у祵鍏ュ纺寰澶勭悊鍣
镎崭綔绯荤粺 宓屽叆寮廘INUX瀹炴椂镎崭綔绯荤粺
瑙嗛戝弬鏁
铡嬬缉镙囧嗳 瑙嗛戯细H.265锛孒.264
阔抽戯细G.711A
瑙嗛戝垎杈ㄧ巼 300W/1080P/960P/720P/D1/CIF/QCIF
褰曞儚绠$悊
褰曞儚鏂瑰纺 镓嫔姩褰曞儚锛炴姤璀﹀綍镀忥紴锷ㄦ佹娴嫔綍镀忥紴瀹氭椂褰曞儚
褰曞儚锲炴斁 鏀鎸4璺锲炴斁
澶囦唤鏂瑰纺 鏀鎸佺‖鐩樸佸栨帴USB瀛桦偍璁惧
I/O鎺ュ彛
瑙嗛戣緭鍏 4璺
瑙嗛戣緭鍑 1璺疺GA锛1璺疕DMI锛屾敮鎸乂GA/HDMI瑙嗛戝悓婧愯緭鍑
鍏跺畠鎺ュ彛 1涓鍐呯疆SATA3.0鎺ュ彛锛1涓锏惧厗浠ュお缃戝彛锛1涓鍓岖疆USB2.0鎺ュ彛锛1涓钖庣疆USB2.0鎺ュ彛锛1涓鐢垫簮鎺ュ彛
UVC锛孷4L2锛孒.264链変粈涔埚叧绯伙纻
鐞呜В锘烘湰姝g‘锛屼絾鏄涓嶅熷嗳纭銆
鍑嗙‘镄勬潵璇:UVC鏄涓绉岛sb瑙嗛戣惧囬┍锷ㄣ傜敤𨱒ユ敮鎸乽sb瑙嗛戣惧囷纴鍑℃槸usb鎺ュ彛镄勬惮镀忓ご閮借兘澶熸敮鎸乂4L2鏄疞inux涓嬬殑瑙嗛戦噰闆嗘嗘灦銆傜敤𨱒ョ粺涓鎺ュ彛锛屽悜搴旂敤灞傛彁渚汚PIH.264鏄涓绉嶈嗛戠紪镰佹妧链銆傜敤𨱒ュ帇缂╁师濮嫔浘镀忥纴浠ユ柟渚垮瓨鍌‘伍’ FFmpeg之Linux下编译与调试
下面的一切都是在 root 模式下进行的,可以不再 root 模式下进行
基础环境就是编译中亩代码的基础库,Ubuntu联网安装软件很简单,一个语句即可搞定,这里列出语句如下:
依赖库分两方面,参考以下网站列出的依赖库信息,本文选择凳枣的版本均参考于此网页: FFmpeg依赖库信息
首先创建 FFmpeg 代码目录,所有的源代码放在这个目录下
FFmpeg 编译之后,即可使用。编译生成的可执行程序在 ~/bin 目录下
注:上面的 ./configure 配置编译后并不能进行调试,需要如下配置.
刚才的工程可以运行,但不能debug。解决此问题,首先认定一点,生成的可执行程序中,ffmpeg 不包含调试信息,调试信息在 ffmpeg_g 中,debug 要选择 ffmpeg_g。
另外,./config选项也是确定包含调试信息的核心,需要在config中添加:
采用以下命令重新卖粗森config:
一些注意事项; 在使用 ffplay 播放生成 h264 格式的视频时,播放速度会加快,解决方式:不要使用 FFmpeg 转码生成纯 h264 格式的视频,要使用一种容器包含 h264 视频,即生成一种音视频流格式,也就是不要生成纯粹的 h264 码流,而是生成诸如 mkv 等格式的文件。
‘陆’ linux下编译ffmpeg时关于configure的问题.
看到个类似的问题:
www.avidemux.org/smf/index.php?topic=11974.0
你这个东西真不好说,不过看来是 x264 因为是静态编译,静态编译我记得需要别的函数库也是静态的。你这个应该是 x264 本身就有找不到的函数入口问题,导致现在传染给了 ffmpeg 。
你看看 config.log 这堆错误前面的编译命令和编译对应的文件,应该是可以通过增加 lib 目录解决。但也不排除可能你还需要别的程序的静态库。
话说 __pow_finite 应该是 glibc 的函数库提供的吧?按说 glibc 应该肯定在 GCC 调用的 lib 目录里面啊。
‘柒’ linux下,linphone怎么支持x264编码
你下载个 ffmpeg试试,然后安装的时候橡慎注意安装的燃如纯步骤。:以
x264-snapshot-20101130-2245.tar.bz2为例
./configure --disable-asm
make
(把x264的静态库和头文件拷皮咐贝到相应位置,即gcc查找库和头文件的目录)
cp libx264.a /usr/lib
cp x264.h /usr/include
‘捌’ linux 如何运行编译程序
gcc有多达100多个参数,现介绍常用的几个。如果对其他参数也有兴趣,可以参考:man gcc
预先处理选项
-E: 只对文件进行预处理,输出结果到标准输出
-C: 告诉预处理器不要丢弃注释.配合`-E‘选项使用.-P: 告诉预处理器不要产生`#line'命令.配合`-E'选项使用.
-v: 显示正在使用的gcc的版本
常用编译选项
-c: 将源程序编译为目标代码但并不做链接的工作,不生成最终的可执行文件,只生成一个与源文件文件名相同的以.o为后缀的目标文件。
-S:将远程序编译为一个后缀为.s的汇编语言文件,不会生成可执行文件
-x:强制编译器用指定的语言编译器来编译某个源文件
gcc -x c++ test.c 表示强制用C++编译器来编译c程序
-static: 强制连接静态库,运行时不依赖动态库
-share: 编译时尽量使用动态库
-o: 指定生成的可执行文件名,如果没有该选项,如果生成可执行文件,默认文件名为a.out
编译路径选项
-i : 指定特定头文件
gcc –c -i /home/zry/test.h test.c
-I<DIR>:依赖选项,指定头文件路径
Linux下大多数函数将头文件放在/usr/include目录下,如果需要指定其他路径,可以使用该选项
gcc –I/home/zry/include –c test.c 添加/home/zry/include到查找路径
-L<DIR> : 指定库文件搜素路径,用法同上
-l<库名>:指定特定库文件
gcc –lapp –c test.c
Linux的库文件有一个约定,即以lib开头,-lapp表示连接libapp.so库文件
目标生成选项
-shared: 生成动态库
gcc –shared libtest.so -i /home/zry/test.h test.c
生成静态库需要ar命令,后面讲解
-fPIC: 生成可用于动态库的位置独立代码。所有的内部寻址均通过全局偏移表完成。
-ansi:支持符合ANSI标准的C程序.
该选项就会关闭GNU C中某些不兼容ANSI C的特性,例如asm, inline和 typeof关键字以及诸如unix和vax这些表明当前系统类型的预定义宏。
__asm__, __extension__, __inline__和__typeof__仍然有效
使用`-ansi'选项的时候,预处理器会预定义一个__STRICT_ANSI__宏.有些头文件 关注此宏,以避免声明某些函数,或者避免定义某些宏,这些函数和宏不被ANSI标准调用;这样就不会干扰在其他地方使用这些名字的程序了.
fno-asm:此选项实现ansi选项的功能的一部分,它禁止将asm,inline和typeof用作关键字。
-fno-strict-prototype:只对g++起作用,使用这个选项,g++将对不带参数的函数,都认为是没有显式的对参数的个数和类型说明,而不是没有参数.而gcc无论是否使用这个参数,都将对没有带参数的函数,认为没有显式说明的类型
-fthis-is-varialble:就是向传统c++看齐,可以使用this当一般变量使用
-fcond-mismatch:允许条件表达式的第二和第三参数类型不匹配,表达式的值将为void类型
-funsigned-char:
-fno-signed-char:
-fsigned-char:
-fno-unsigned-char:
这四个参数是对char类型进行设置,将char类型设置unsigned char(前两个参数)或者 signed char(后两个参数)
-imacros file: 将file文件的宏,扩展到gcc/g++的输入文件,宏定义本身并不出现在输入文件中
-Dmacro: 相当于C语言中的#define macro
-Dmacro=defn: 相当于C语言中的#define macro=defn
-Umacro: 相当于C语言中的#undef macro
-undef: 取消对任何非标准宏的定义
-M: 生成文件关联的信息。包含目标文件所依赖的所有源代码
-MM: 和M一样,但是它将忽略由#include<file>造成的依赖关系。
-MD: -M相同,但是输出将导入到.d的文件里面
-MMD: 和-MM相同,但是输出将导入到.d的文件里面
警告选项
fsyntax-only:检查程序中的语法错误,但是不产生输出信息.
-w:禁止所有警告信息.
-Wno-import: 禁止所有关于#import的警告信息.
-pedantic:打开完全遵从ANSI C标准所需的全部警告诊断;拒绝接受采用了被禁止的语法扩展的程序.
-Werror:将所有警告转换为错误
Werror选项要求GCC将所有警告当作错误进行处理。
-Wall: 显示所有警告信息
‘玖’ linux下安装了x264,函数调用时找不到x264的相应函数
linux下安装了x264,函数调雀和用时找不到x264的相应函数,错误扮凳原因是顷缺盯编译没有找到x264库:
gcc -c yuvTO264.c -L /usr/x264Library(x264库)
正确编译为:gcc yuvTO264.o -o yuvTO264 -L /usr/local/bin -I x264头文件