1. 程式人生 > >ubuntu 使用MingW交叉編譯winffmpeg靜態庫

ubuntu 使用MingW交叉編譯winffmpeg靜態庫

編譯步驟

  • 1 構建MinGW編譯環境

    下載MinGw工具(本人使用的mingw-w64-build-3.6.7)
    使用步驟
    1.chmod +x mingw-w64-build-3.6.7
    2../mingw-w64-build-3.6.7 按照提示進行填寫即可
    下載地址1
    下載地址2

  • 2設定path路徑

    export PATH=”$PATH:/home/×××/Desktop/ffmpeg282/mingw-w64-i686/bin”

  • 3.安裝需要的依賴庫(本人之需要幾個)

    libx264 libfaac libopenjpeg libogg libspeex libvorbis libtheora ffmpeg

  • 4.依賴庫的編譯(我的庫統一放到一個目錄下面的/home/×××/Desktop/ffmpeg282/opensdk)

    4.1 libx264(需要編譯和ffmpeg版本相符合的ffmpeg2.8.2git下載到h264以後要切換到commit為 d7ccd89f1bea53c8c524f8e6eb963d57defb6813)

    ./configure --enable-static --enable-win32thread --host=i686-w64-mingw32 --prefix=/home/×××/Desktop/ffmpeg282/opensdk --cross-prefix=i686-w64-mingw32-
    make
    make install
    

    4.2libfaac

    ./configure --host=i686-w64-mingw32 --prefix=/home/×××/Desktop/ffmpeg282/opensdk  --enable-static --disable-shared --with-mp4v2=no
    make
    make install
    

    4.3libopenjpeg

    ./configure --host=i686-w64-mingw32 --prefix=/home/×××/Desktop/ffmpeg282/opensdk --enable-static --disable-shared
    

    4.4libspeex

    ./configure --host=i686-w64-mingw32 --prefix=/home/×××/Desktop/ffmpeg282/opensdk --enable-static --disable-shared --disable-oggtest
    make
    make install
    

    4.5libvorbis

     ./configure --host=i686-w64-mingw32 --prefix=/home/×××/Desktop/ffmpeg282/opensdk --enable-static --disable-shared --disable-oggtest
    make
    make install
    

    4.5 libtheora

     ./configure --host=i686-w64-mingw32 --prefix=/home/×××/Desktop/ffmpeg282/opensdk --enable-static --disable-shared --disable-oggtest --disable-vorbistest --disable-sdltest --with-ogg-includes=/home/×××/Desktop/ffmpeg282/opensdk/include --with-ogg-libraries=/home/×××/Desktop/ffmpeg282/opensdk/lib
    make
    make install
    

    4.6 libogg

    ./configure --host=i686-w64-mingw32 --prefix=/home/×××/Desktop/ffmpeg282/opensdk --enable-static --disable-shared
    make
    make install
    

    4.7 libmp3lame

    CFLAGS=-DFORCEINLINE= ./configure --host=i686-w64-mingw32 --prefix=/home/×××/Desktop/ffmpeg282/opensdk --enable-static --disable-shared --disable-frontend
    make
    make install
    
  • 5編譯ffmpeg

    ../ffmpeg-2.8.2/configure  --enable-static --disable-shared --enable-version3 --enable-gpl --enable-nonfree --disable-pthreads --enable-w32threads --enable-runtime-cpudetect --enable-memalign-hack --enable-libfaac  --enable-libopenjpeg --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libx264  --enable-zlib --enable-cross-compile --target-os=mingw32 --arch=x86 --prefix=/home/×××/Desktop/ffmpeg282/built_ffmpeg4/built_re  --cross-prefix=i686-w64-mingw32- --extra-cflags="-I/home/×××/Desktop/ffmpeg282/opensdk/include" --extra-ldflags="-L/home/×××/Desktop/ffmpeg282/opensdk/lib"
    make
    make install
    

- 注意

編譯xvid時需要先編輯configure檔案,然後刪除裡面的“-mno-cygwin”欄位,否則make會失敗,提示-mno-cygwin無效。libmp3lame命中中最前面的“CFLAGS=-DFORCEINLINE= ”是為了防止mp3lame中的一個編譯錯誤,要記得帶上。在編譯庫的時候如果有庫報出函式型別不一致的錯誤只需把原始檔中的程式碼修改一下即可。如果在make時報出x264.c的變數沒有定義應該時x264版本不對
如果你需要更多的庫就需要自己編譯進去

如果在configure時報出not found using pkg-config 是因為沒有找到.pc檔案。只需把.pc檔案目錄加進去即可
export PKG_CONFIG_PATH=/home/×××/Desktop/ffmpeg282/x265_1.5/:$PKG_CONFIG_PATH

參考文章

相關推薦

ubuntu 使用MingW交叉編譯winffmpeg靜態

編譯步驟 1 構建MinGW編譯環境 下載MinGw工具(本人使用的mingw-w64-build-3.6.7) 使用步驟 1.chmod +x mingw-w64-build-3.6.7

MinGW編譯ffmpeg靜態給Visual C++使用

本文地址: blog.csdn.net/wangjia184/article/details/7931164首先推薦 http://ffmpeg.zeranoe.com/builds/, 這裡已經有編譯好的動態連線庫。可惜上面沒靜態連結庫。我也試過 DLL2Lib, 但是無法

使用 MinGW 編譯 ZeroMQ 靜態

最近折騰zeromq,嘗試用 MinGW 來編譯了一下。 根據 http://zeromq.org/build:mingw 的說明,用MinGW來編譯 ZeroMQ 自然是沒有問題的。但是業餘測試一些簡單的程式碼還是用靜態庫比較方便。怎奈何,預設的 configure

opencv交叉編譯arm環境靜態,動態和可執行程式

在工作中遇到把基於opencv的程式碼移植到板子上執行,在網上查看了很多資料,嘗試了兩種方案,都是可行的 1.把opencv程式碼用ndk的方式編譯成可執行檔案,直接放到板子上執行,這種方式是最便捷的不用考慮板子上其他程式的干擾 附上ndk編譯程式碼,準備好下面兩個檔案後,

Android:JNI與NDK(二)交叉編譯與動態靜態

  歡迎關注公眾號,第一時間獲取最新文章:   本篇目錄 一、前言 本篇主要以window開發環境為背景介紹一下NDK開發中需要掌握的交叉編譯等基礎知識,選window系統主要是照顧大多數讀者,mac ,linux作業系統基本是同樣適用的。 交叉編譯就是在A平臺編譯出可

ubuntu交叉編譯mono

local config ubuntu16 align 交叉編譯 disable vfp ces ati 環境:ubuntu16.04 配置: CC=arm-linux-yourabi-gcc CFLAGS="-march=armv7-a -mfloat-abi=softf

ubuntu交叉編譯ffmpeg

-s extra cast miss lar har share security project 環境:ubuntu16.04 交叉編譯器版本:4.8.3 依賴x264,lame x264: 1.wget ftp://ftp.videolan.org/pub/x264/s

Mac OS X10.10_xcode6.1_ios8.1環境下,編譯lame靜態libmp3lame.a,支持arm64 armv7s x86_64 i386 armv7指令集

ces mod dir helper plain per 代碼 then -m 近期升級了系統到Mac OS X 10.10 而且更新了XCode6.1和iOS 8

dlib編譯靜態及被其它程序調用

直接 .cpp 源文件 .net .lib 文件 自己的 net xxx 一、git下載:https://github.com/davisking/dlib   官網:http://dlib.net/ 二、vs中編譯成靜態庫   1、在vs2015中創建靜態庫工程(vs20

ubuntu安裝交叉編譯工具

手裡有一塊樹莓派3b+,想用來學習嵌入式開發,雖然可以在上面直接安裝gcc,編譯原始碼,但一想到早晚會用到交叉編譯工具,還是學學怎麼裝吧。 網上一大堆亂七八糟的裝法,有的去github下載安裝,有的不知道什麼鬼,看不懂。 開啟ubuntu終端 使用sudo apt list gcc-

iOS編譯OpenSSL靜態(使用指令碼自動編譯)

使用指令碼編譯:https://github.com/gitusrs/openssl-ios-build-shell-script 1、該指令碼只是一個OpenSSL編譯指令碼,使用時需要自己下載OpenSSL原始碼(openssl-*.tar.gz) 2、將 openssl-

用 Xcode 編譯 Cocoapods 靜態

在開發中用 Cocoapods 託管開放給第三方的 SDK 框架是很方便的,但是在實際應用中卻發現,cocoapods 的 lint 檢驗過於嚴格,在建立 framework 時經常因為各種無法描述的問題導致 xcodebuild 編譯失敗或者校驗無法通過。 對於一些複雜專

curl編譯linux靜態及使用總結

一、安裝OPENSSH 1、上傳檔案並解壓 openssl-1.0.2k.tar.gz 2、執行 ./config no-asm make make install 備註:如果要編譯動態庫,需要增加引數如下: ./config no-asm --shared 3、生成的檔

FFmpeg3.1.1編譯IOS靜態.a檔案

一、準備工作 1.下載最新的  gas-preprocessor.pl 複製gas-preprocessor.pl到/usr/bin下, 修改檔案許可權:chmod 777 /usr/bin/gas-preprocessor.pl 2.下載編譯指令碼/FFmpeg-i

Mac_XCode編譯ios靜態

在 xcode 下編譯並使用 ios 的 .a 靜態庫 整個過程也類似 vs 編譯 lib靜態庫 新建靜態庫工程 File -> New -> Project

交叉編譯靜態連結問題

問題一:交叉編譯生成可執行檔案,無法在目標板上執行 一、問題描述 arm-linux-gcc  -o  name.c   編譯程式正常,但可執行檔案無法在開發板上執行。提示找不到該檔案 二、問題排除

linux 下編譯生成靜態和動態

我們此處為了說明靜態庫和動態庫的編譯,會使用示例程式碼。建立  test.h, hello.cpp 和 world.cpp, 在兩個原始檔中分別實現兩個函式( 此處都是示例程式碼,檔案命名不規範,理解意思即可 )。test.h (靜態庫標頭檔案)#ifndef _TEST_

從零開始移植QT4.8.5之三--linux下交叉編譯QT執行

這篇文章要實現的目標是在linux下交叉編譯QT在嵌入式裝置OK6410的執行庫,最終在OK6410上執行QT演示程式。 1、觸控式螢幕庫檔案安裝tslib 首先如果嵌入式裝置上有觸控式螢幕,需要先移植tslib,這個不是本次的重點,所以我們就直接搭建編譯的時候需要的tsl

linux下簡單編譯靜態編譯使用

庫函式,那麼一般來說庫函式分為兩種方式:靜態庫和動態庫。兩者的區別其實很小,靜態庫是必須要連結到執行檔案中去的,而動態庫是不需要連結到最後的執行檔案中的。怎麼理解呢?也就是說,對於最後的執行檔案而言,

編譯curl靜態的方法

1>e:\c++\curl程式設計\curllib7.21.7\src\easy.c(233) : warning C4273: “curl_global_init”: dll 連結不一致 1>        e:\c++\curl程式設計\curllib7.21.7\include\curl\c