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頭文件