⚠️ Este es un sitio de traducción no oficial, sin relación con el proyecto FFmpeg. Para información autorizada, consulte la página original (https://ffmpeg.org/platform.html).

Información específica de la plataforma

1 Similar a Unix

Algunas partes de FFmpeg no pueden compilarse con la versión 2.15 del ensamblador de GNU, que aún proporcionan algunas distribuciones AMD64. Para comprobar que su compilador usa realmente la versión necesaria de gas tras actualizar binutils, ejecute:

$(gcc -print-prog-name=as) --version

Si no es así, debería instalar un compilador distinto que no tenga codificada una ruta fija a gas. En el peor de los casos, pase --disable-asm a configure.

1.1 Configuración avanzada del enlazado

Si compiló las bibliotecas de FFmpeg de forma estática y quiere usarlas para crear su propia biblioteca compartida, puede que necesite forzar la compatibilidad con PIC (con --enable-pic al configurar FFmpeg) y añadir la siguiente opción a los LDFLAGS de su proyecto:

-Wl,-Bsymbolic

Si su plataforma de destino requiere binarios de posición independiente, debe pasar el flag de enlazado correspondiente (por ejemplo, -pie) a --extra-ldexeflags.

1.2 BSD

El make de BSD no compilará FFmpeg: necesita instalar y usar GNU Make (gmake).

1.3 (Open)Solaris

Compilar FFmpeg requiere GNU Make, así que debe invocarlo con (gmake); el Make estándar de Solaris no funcionará. Al compilar con un front-end sin compatibilidad con c99 (gcc, el suncc genérico) añada --extra-libs=/usr/lib/values-xpg6.o o --extra-libs=/usr/lib/64/values-xpg6.o a las opciones de configure, ya que de forma predeterminada la libc no es compatible con c99. Las comprobaciones que realiza configure pueden generar una excepción que provoque la muerte del propio configure, debido a un error del shell del sistema. Para evitarlo, basta con invocar directamente otro shell, como bash:

bash ./configure

1.4 Darwin (Mac OS X, iPhone)

El toolchain incluido con Xcode es suficiente para compilar el código básico sin aceleración.

Mac OS X en PowerPC o ARM (iPhone) requiere un preprocesador de https://github.com/FFmpeg/gas-preprocessor o https://github.com/yuvi/gas-preprocessor (actualmente desactualizado) para compilar las funciones de ensamblador optimizadas. Coloque el script Perl en algún lugar de su PATH; el configure de FFmpeg lo detectará automáticamente.

Mac OS X en amd64 y x86 requiere nasm para compilar la mayoría de las funciones de ensamblador optimizadas. Fink, Gentoo Prefix, Homebrew o MacPorts pueden proporcionarlo fácilmente.

2 DOS

Por varios motivos, se prefiere usar un compilador cruzado. http://www.delorie.com/howto/djgpp/linux-x-djgpp.html

3 OS/2

Para obtener información sobre cómo compilar FFmpeg en OS/2, consulte http://www.edm2.com/index.php/FFmpeg.

4 Windows

4.1 Compilación nativa en Windows con MinGW o MinGW-w64

FFmpeg puede compilarse para ejecutarse de forma nativa en Windows usando el toolchain MinGW-w64. Instale las últimas versiones de MSYS2 y MinGW-w64 desde http://msys2.github.io/ o http://mingw-w64.sourceforge.net/. Encontrará instrucciones de instalación detalladas en la sección de descargas y en las FAQ.

Notas:

  • No se recomienda compilar para el entorno MSYS: MSYS2 ofrece un entorno MinGW-w64 completo mediante mingw64_shell.bat o mingw32_shell.bat, que debería usarse en lugar del entorno que ofrece msys2_shell.bat.
  • Compilar con MSYS2 puede acelerarse desactivando las reglas implícitas del Makefile con make -r en lugar del simple make. Esta mejora es casi imperceptible en compilaciones normales de una sola vez y solo se nota al ejecutar make por segunda vez (por ejemplo, durante make install).
  • Para compilar FFplay debe tener instalada la biblioteca de desarrollo MinGW de SDL y pkg-config.
  • Usando ./configure --enable-shared al configurar FFmpeg, puede compilar las bibliotecas de FFmpeg (por ejemplo, libavutil, libavcodec, libavformat) como DLL.

4.1.1 Compilación nativa en Windows con MSYS2

El entorno MinGW-w64 de MSYS2 ofrece toolchains y dependencias listos para usar a través de pacman.

Asegúrese de usar mingw64_shell.bat o mingw32_shell.bat para tener el entorno MinGW-w64 correcto. La instalación predeterminada incluye accesos directos a ellos bajo MinGW-w64 Win64 Shell y MinGW-w64 Win32 Shell.

# normal msys2 packages
pacman -S make pkgconf diffutils

# mingw-w64 packages and toolchains
pacman -S mingw-w64-x86_64-nasm mingw-w64-x86_64-gcc mingw-w64-x86_64-SDL2

Para compilar para 32 bits, sustituya x86_64 por i686 en el comando anterior.

4.2 Microsoft Visual C++ o Intel C++ Compiler para Windows

FFmpeg puede compilarse con MSVC 2013 o posterior.

Necesitará los siguientes requisitos previos:

  • MSYS2
  • NASM (también disponible a través del gestor de paquetes de MSYS2.)

Para preparar un entorno adecuado en MSYS2, debe ejecutar msys_shell.bat desde la línea de comandos de Visual Studio o de Intel Compiler.

Coloque nasm.exe en algún lugar de su PATH.

A continuación, asegúrese de que cualquier otra cabecera o biblioteca que quiera usar, como zlib, esté en un lugar donde el compilador pueda encontrarla. Para ello, modifique las variables de entorno LIB e INCLUDE para incluir las rutas al estilo Windows de esos directorios. Como alternativa, puede probar las opciones de configure --extra-cflags/--extra-ldflags.

Por último, ejecute:

For MSVC:
./configure --toolchain=msvc

For ICL:
./configure --toolchain=icl

make
make install

Si quiere compilar bibliotecas compartidas, añada --enable-shared a sus opciones de configure. Tenga en cuenta que, debido a cómo MSVC e ICL manejan las importaciones y exportaciones de DLL, no puede compilar bibliotecas estáticas y compartidas al mismo tiempo, y habilitar las compartidas desactivará automáticamente las estáticas.

Notas:

  • Si quiere compilar con compatibilidad con zlib, tendrá que conseguir en algún sitio un binario de zlib compatible con una biblioteca de importación de MSVC, o bien, si prefiere enlazar de forma estática, puede seguir las instrucciones siguientes para compilar un zlib.lib compatible con MSVC. Sea cual sea el método que use, debe seguir igualmente el paso 3, o la compilación fallará.
    1. Consiga las fuentes de zlib.
    2. Edite win32/Makefile.msc para que use -MT en lugar de -MD, ya que así es como se compila también FFmpeg.
    3. Edite zconf.h y elimine la inclusión de unistd.h. Esta se incluye erróneamente al compilar FFmpeg.
    4. Ejecute nmake -f win32/Makefile.msc.
    5. Mueva zlib.lib, zconf.h y zlib.h a un lugar donde MSVC pueda verlos.
  • FFmpeg se ha probado con lo siguiente en i686 y x86_64:
    • Visual Studio 2013 Pro and Express
    • Intel Composer XE 2013
    • Intel Composer XE 2013 SP1

Cualquier otra combinación no se admite oficialmente.

4.2.1 Enlazar con FFmpeg usando Microsoft Visual C++

Si va a enlazar con bibliotecas estáticas compiladas con MSVC, debe asegurarse de que Runtime Library esté configurado como Multi-threaded (/MT) en la configuración de su proyecto.

Necesitará definir inline como algo que MSVC entienda:

#define inline __inline

Además, tenga en cuenta que, como se indica en Microsoft Visual C++, necesitará un inttypes.h compatible con MSVC.

Si va a usar bibliotecas de importación creadas con dlltool, debe configurar References como No (/OPT:NOREF) en los ajustes de optimización del enlazador; de lo contrario, los binarios resultantes fallarán en tiempo de ejecución. Esto no es necesario si usa bibliotecas de importación generadas por lib.exe. Este problema está registrado en el proyecto original en http://sourceware.org/bugzilla/show_bug.cgi?id=12633.

Para crear bibliotecas de importación que funcionen con la opción /OPT:REF (habilitada de forma predeterminada en modo Release), siga estos pasos:

  1. Abra el símbolo del sistema de Visual Studio.

Como alternativa, en una línea de comandos normal, llame a vcvars32.bat, que configura las variables de entorno para las herramientas de Visual C++ (la ubicación estándar de este archivo suele ser algo como C:\Program Files (x86_\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat).

  1. Entre en el directorio bin donde se guardan los archivos LIB y DLL generados.
  2. Genere nuevas bibliotecas de importación con lib.exe:
     lib /machine:i386 /def:..\lib\foo-version.def  /out:foo.lib
    

Sustituya foo-version y foo por los nombres de las bibliotecas correspondientes.

4.3 Compilación cruzada para Windows con Linux

Debe usar las herramientas de compilación cruzada de MinGW disponibles en http://www.mingw.org/.

A continuación, configure FFmpeg con las siguientes opciones:

./configure --target-os=mingw32 --cross-prefix=i386-mingw32msvc-

(puede cambiar el cross-prefix según el prefijo elegido para las herramientas de MinGW).

Después podrá probar FFmpeg fácilmente con Wine.

4.4 Compilación bajo Cygwin

Use Cygwin 1.7.x, ya que las versiones obsoletas 1.5.x de Cygwin carecen de llrint() en su biblioteca C.

Instale su Cygwin con todos los paquetes "Base", más los siguientes paquetes "Devel":

binutils, gcc4-core, make, git, mingw-runtime, texinfo

Para ejecutar FATE también necesitará los siguientes paquetes "Utils":

diffutils

Si quiere compilar FFmpeg con bibliotecas adicionales, descargue los paquetes "Devel" de Cygwin para Ogg y Vorbis desde cualquier repositorio de paquetes de Cygwin:

libogg-devel, libvorbis-devel

Estos paquetes de bibliotecas solo están disponibles en Cygwin Ports:

libSDL-devel, libgsm-devel, libmp3lame-devel,
speex-devel, libtheora-devel, libxvidcore-devel

Para x264 se recomienda compilarlo desde las fuentes, ya que evoluciona demasiado rápido para que Cygwin Ports se mantenga al día.

4.5 Compilación cruzada para Windows bajo Cygwin

Con Cygwin puede crear binarios de Windows que no necesitan cygwin1.dll.

Instale su Cygwin como se explicó antes, más estos paquetes "Devel" adicionales:

gcc-mingw-core, mingw-runtime, mingw-zlib

y añada algunos flags especiales a su invocación de configure.

Para una compilación estática ejecute

./configure --target-os=mingw32 --extra-cflags=-mno-cygwin --extra-libs=-mno-cygwin

y para una compilación con bibliotecas compartidas

./configure --target-os=mingw32 --enable-shared --disable-static --extra-cflags=-mno-cygwin --extra-libs=-mno-cygwin

4.6 ARM64EC

FFmpeg no tiene intención de admitir la configuración de compilación ARM64EC de Windows; no se aceptarán parches que modifiquen las bibliotecas individuales con fines de ARM64EC.

Aun así, puede que sea posible compilar FFmpeg en esta configuración; tal compilación puede parecer que funciona hasta cierto punto. Sin embargo, es posible que presente algunas incoherencias de ABI que no estamos dispuestos a corregir.

(Adaptar el código ensamblador de aarch64 para admitir estrictamente ARM64EC requeriría usar ifdef o modificar prácticamente todo ese código, lo que supondría una carga de mantenimiento enorme. Además, cambiar las superficies de ABI de la biblioteca para corregir las incoherencias podría exigir cambios extensos e invasivos.)

Alojamiento proporcionado por telepoint.bg