Todo el registro del proceso de compilación cruzada de vlc3.0.4 en ubuntu16.04x64

    Después de lanzar durante mucho tiempo los fines de semana, después de problemas continuos, localizar problemas y resolver problemas, finalmente compilé y pasé con éxito la última versión de vlc, y probé varias versiones de compilación en el medio, como vlc3.La versión .x se ha compilado, puede consultar: plataforma ubuntu, compilación cruzada VLC/LibVLC, generar versión win32 y LibVLC agrega interfaz de video ) está relativamente cerca, debería ser fácil de compilar y aprobar, hay muchos problemas si no se esperaba, de hecho, se debe principalmente a la versión La interfaz no corresponde al problema, así que probé varias versiones de ubuntu 16.04x86, 16.04x64, 18.04x64, etc., y finalmente vi el fruto del éxito, como si hubiera ganado un gran premio. Bueno, basta de chismes, registremos los problemas en el proceso de compilación.

   El entorno de compilación es la versión ubuntu16.04x64 LTS instalada en la máquina virtual del sistema win7, no hay nada que decir al respecto, si no está familiarizado con él, puede buscarlo usted mismo. Debido a que la versión vlc3.x requiere que gcc/g++ sea compatible con c++11, la versión de gcc/g++ no debería ser demasiado baja. Puede verificarlo con el comando gcc --version. Yo uso la versión 4.9.3, que es superior a 4.9.0 Ambos admiten c++ 11.

Aunque el documento de compilación    oficial dice que definitivamente fallará al compilar, aún necesita consultarlo. Al menos sabe cómo operar cada paso.

   1. Entorno Mingw-w64

Debido a que vlc usa principalmente la versión de 32 bits, instale el entorno de compilación cruzada x86 directamente:

sudo apt-get install gcc-mingw-w64-i686 g++-mingw-w64-i686 mingw-w64-herramientas

2. Conjunto de herramientas de desarrollo

Las herramientas relevantes de las que depende el proceso de compilación de vlc, etc., se pueden instalar directamente mediante comando.

sudo apt-get update
sudo apt-get install lua5.2 libtool automake autoconf autopoint make gettext pkg-config
sudo apt-get install qt4-dev-tools qt5-default git subversion cmake cvs 
sudo apt-get install wine64-development-tools zip p7zip nsis bzip2
sudo apt-get install yasm ragel ant default-jdk protobuf-compiler dos2unix
sudo apt-get install gperf flex bison

Una vez completada la instalación, debe confirmar la versión de gettext, verifique gettext --version, vlc-3.x requiere  gettext>=0.19.8 , pero la fuente oficial de ubuntu solo se actualiza a 0.19.7, si el la versión es baja, instálela manualmente Can.

wget ftp://ftp.gnu.org/gnu/gettext/gettext-0.19.8.tar.xz

tar -Jxvf gettext-0.19.8.tar.xz

cd gettext-0.19.8/

./configurar --prefijo=/usr

sudo hacer && sudo hacer instalar

3. Instalar bibliotecas de terceros

Primero descargue el código fuente de vlc3.0.4. Se recomienda descargarlo manualmente desde el directorio ftp oficial . Es posible que lo que obtenga git no sea la última versión.

Después de descomprimir el código fuente, ingrese al directorio vlc e inicie la operación:

mkdir -p contrib/win32
cd contrib/win32
../bootstrap --host=HOST-TRIPLET
make fetch
make

Si se le indica que HOST-TRIPLET no se puede reconocer, puede cambiarlo directamente a i686-w64-mingw32.

Aquí se usa el método make fetch en lugar del método make prebuild, porque los archivos de la biblioteca de prebuild son relativamente antiguos y deben esperar un tiempo.

Cuarto, compilar vlc

Regrese al directorio vlc e inicie la operación

./bootstrap
mkdir win32
cd win32
exportar PKG_CONFIG_LIBDIR=$HOME/vlc/contrib/i686-w64-mingw32/lib/pkgconfig
exportar CFLAGS="-O2"
exportar CXXFLAGS="-O2"
../configure --host=i686- w64-mingw32   
encontró los siguientes problemas:

1, cp ../../contrib/tarballs/dxgi1_2.idl dxgi12 && cd dxgi12 && patch -fp1 < ../../../contrib/src/d3d11/dxgi12.patch
archivo de parches dxgi1_2.idl
mkdir - p -- "/home/vlc/vlc/contrib/i686-w64-mingw32/include/"
i686-w64-mingw32-widl -DBOOL=WINBOOL -I/usr/include/wine/windows/ -h -o /home /vlc/vlc/contrib/i686-w64-mingw32/include/dxgi1_2.h dxgi12/dxgi1_2.idl
dxgi12/dxgi1_2.idl:43: error: error de sintaxis, aKNOWNTYPE inesperado, esperando tIMPORT
../../contrib/src /d3d11/rules.mak:63: receta para el objetivo '/home/vlc/vlc/contrib/i686-w64-mingw32/include/dxgi1_2.h' falló
en hacer: *** [/home/vlc/vlc/contrib / i686-w64-mingw32/include/dxgi1_2.h] Error 1
解决方案
sudo apt-get install wine64-development-tools 
Modifique IDL_INC_PATH = /usr/include/wine/windows/ en contib\src\d3d9\rules.mak a IDL_INC_PATH = /usr/include/wine-development/windows/ modifique IDL_INC_PATH en contrib\src\d3d11\ rules.mak =
/ usr/include/wine/windows/ for IDL_INC_PATH = /usr/include/wine-desarrollo/windows/

2. Error de versioninfo.rc:

i686-w64-mingw32-windres: versioninfo.rc.in:21: error de sintaxis 
i686-w64-mingw32-windres: error de preprocesamiento. 
Makefile: 1224: la receta para el objetivo 'versioninfo.lo' falló 
make[2]: *** [versioninfo.lo] Error 1 
make[2]: Dejando el directorio '/home/d/vlc-3.0.0/contrib/win32 /gcrypt/src' 
Makefile:487: la receta para el objetivo 'install-recursive' falló 
make[1]: *** [install-recursive] Error 1 
make[1]: Dejando el directorio '/home/d/vlc-3.0. 0/contrib/win32/gcrypt' 
../../contrib/src/gcrypt/rules.mak:72: la receta para el destino '.gcrypt' falló 
en hacer: *** [.gcrypt] Error 2 

Solución :
modifique la línea 42 de contrib/win32/gcrypt/configure.ac  

Antes de la modificación: m4_esyscmd([git rev-parse --short HEAD | tr -d '\n\r']))
Después de la modificación: m4_esyscmd([printf %x $(wc -l < ​​​​debian/changelog)]) )

3. ../../contrib/src/protobuf/rules.mak:24: receta para el destino '.protobuf' falló
en hacer: *** [.protobuf] Error 2
Solución :
Ver protobuf a través de protoc --version Versión, necesita actualizar protobuf a la versión 3.0.1, para que sea consistente con la versión en contribución, para evitar informar errores nuevamente más adelante

https://github.com/protocolbuffers/protobuf/releases/  (Esta dirección puede requerir FQ, colocaré el archivo en el disco de red)

Una vez completada la configuración, ejecute sudo make y se informarán los siguientes errores:

1、En archivo incluido desde ../../modules/access/dshow/dshow.cpp:52:0:
../../modules/access/dshow/access.h:33:24: fatal error: wrl /client.h: no finalizó dicha compilación de archivos o directorios
.

Solución :
descargue mingw-w64-mingw-w64 desde https://forum.videolan.org/viewtopic.php?f=32&t=137580&p=453684&hilit=roapi.h%3A80%3A25#p453684
will mingw-w64-mingw- Copy toda la carpeta wrl en w64/mingw-w64-headers/include a contrib/i686-w64-mingw32/include del paquete compilado

2、/usr/share/mingw-w64/include/roapi.h:60:33: error: 'Windows::Foundation::Initalize' declarado como una variable 'en línea' __inline HRESULT Inicializar (RO_INIT_TYPE it ^ /
     usr
                                 /
share /mingw-w64/include/roapi.h:60:33: error: 'RO_INIT_TYPE' no se declaró en este ámbito
/usr/share/mingw-w64/include/roapi.h:64:7: error: esperado ', ' o ';' antes de '{' token
     ) { return RoInitialize (it); }
       ^
/usr/share/mingw-w64/include/roapi.h: En la función 'void Windows::Foundation::Uninitialize()':
/usr/share/mingw-w64/include/roapi.h:66:23 : error: 'RoUninitialize' no se declaró en este ámbito
     { RoUninitialize (); }
                       ^
/usr/share/mingw-w64/include/roapi.h: en el ámbito global:
/usr/share/mingw-w64/include/roapi.h:74:35: error: 'ABI::Windows::Foundation:: Initialze' declarada como una variable 'en línea'
       __inline HRESULT Initialze (RO_INIT_TYPE it
                                   ^
/usr/share/mingw-w64/include/roapi.h:74:35: error: 'RO_INIT_TYPE' no se declaró en este ámbito
/usr/share /mingw-w64/include/roapi.h:78:9: error: se esperaba ',' o ';' antes de '{' token
       ) { return RoInitialize (it); }
         ^
/usr/share/mingw-w64/include/roapi.h: En la función 'void ABI::Windows::Foundation::Uninitialize()':
/usr/share/mingw-w64/include/roapi.h: 80:25: error: 'RoUninitialize' no se declaró en este ámbito
       { RoUninitialize (); }
                         ^
Makefile: 25261: receta para el objetivo 'access/dshow/dshow.lo' falló
make[4]: *** [access/dshow/dshow.lo] Error 1
Solución :
mingw-w64 - roapi .h dwrite.h dwrite_1.h dwrite_2.h versionhelpers.h y otros archivos en mingw-w64/mingw-w64-headers/include se copian en contrib/i686-w64-mingw32/include/, lo que puede evitar los siguientes errores

3, stream_out/chromecast/cast_channel.pb.h:12:2: error: #error Este archivo fue generado por una versión más nueva de protoc que es
 #error Este archivo fue generado por una versión más nueva de protoc que es
  ^
stream_out/chromecast /cast_channel.pb.h:13:2: error: #error incompatible con los encabezados del búfer de protocolo. Actualice
 #error incompatible con los encabezados de su búfer de protocolo. Actualice
  ^
stream_out/chromecast/cast_channel.pb.h:14:2: error: #error sus encabezados.
 #error tus encabezados.
  ^
En el archivo incluido de stream_out/chromecast/cast_channel.pb.h:22:0,
                 de ../../modules/stream_out/chromecast/chromecast.h:45,
                 de ../../modules/stream_out/chromecast/cast.cpp:33:
/home/zqf/vlc/contrib/i686-w64-mingw32/include/google/protobuf/io/coded_stream.h:1362:5: advertencia: "_MSC_VER" no está definido [-Wundef]
 #if _MSC_VER >= 1300 && !defined(__INTEL_COMPILER)
     ^
En el archivo incluido desde ../../modules/stream_out/chromecast/chromecast.h:45:0,
                 desde ../../modules/stream_out/chromecast/cast.cpp:33:
stream_out/chromecast/cast_channel.pb.h:25:60: error fatal: google/protobuf/generated_message_table_driven.h: no
finalizó la compilación de dicho archivo o directorio .
Makefile: 25196: la receta para el destino 'stream_out/chromecast/libstream_out_chromecast_plugin_la-cast.lo' falló
make[4]: *** [stream_out/chromecast/libstream_out_chromecast_plugin_la-cast.lo] Error 1
Solución : instale la versión protobuf3.0.1, si ya está instalada, este error no debe informarse

4、/home/zqf/vlc/contrib/i686-w64-mingw32/include/versionhelpers.h: En la función 'IsWindows8Point1OrGreater':
/home/zqf/vlc/contrib/i686-w64-mingw32/include/versionhelpers.h: 70:45: error: '_WIN32_WINNT_WINBLUE' no declarado (primer uso en esta función)
     return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINBLUE), LOBYTE(_WIN32_WINNT_WINBLUE), 0);
                                             ^
/home/zqf/vlc/contrib/i686-w64-mingw32/include/versionhelpers.h:70:45: nota: cada identificador no declarado se informa solo una vez para cada función que aparece en
/home/zqf/vlc/contrib/ i686-w64-mingw32/include/versionhelpers.h: en la función 'IsWindowsThresholdOrGreater':
/home/zqf/vlc/contrib/i686-w64-mingw32/include/versionhelpers.h:74:45: error: '_WIN32_WINNT_WINTHRESHOLD' no declarado (primer uso en esta función)
     return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINTHRESHOLD), LOBYTE(_WIN32_WINNT_WINTHRESHOLD) , 0
) ;

Modifique el archivo versionhelpers.h copiado a contrib/i686-w64-mingw32/include/, cambie _WIN32_WINNT_WINBLUE y _WIN32_WINNT_WINTHRESHOLD a _WIN32_WINNT_WIN8

Extra : aquí está la línea de SDKDDKVer.h para Windows 10 (que codifica el valor para cada versión de Windows):

// // Constantes de versión _WIN32_WINNT // 

#define _WIN32_WINNT_NT4 0x0400 // Windows NT 4.0 
#define _WIN32_WINNT_WIN2K 0x0500 // Windows 2000 
#define _WIN32_WINNT_WINXP 0x0501 // Windows XP #define 
_WIN32_WINNT_WS03 0x0502 // Windows Server 2003 
#define _WIN32_ WINNT_WIN6 0x0600 // Windows Vista 
#define _WIN32_WINNT_VISTA 0x0600 // Windows Vista 
#define _WIN32_WINNT_WS08 0x0600 // Windows Server 2008 
#define _WIN32_WINNT_LONGHORN 0x0600 // Windows Vista 
#define _WIN32_WINNT_WIN7 0x0601 // Windows 7 
#define _WIN32_WINNT_WIN8 0x0602 // Windows 8 
#define _WIN32_WINNT_WINBLUE 0x0603 // Windows 8.1 
#define _WIN32_WINNT_WINTHRESHOLD 0x0A00 // Windows 10 
#define _WIN32_WINNT_WIN10 0x0A00 // Windows 10

Una vez completada la creación, realice la operación de empaquetado y generación de archivos relacionados con Windows:

hacer que el paquete gane en común

La primera vez que el empaquetado es exitoso, no se informa ningún error, la segunda vez se informa el siguiente error:

cp: no se puede stat '../share/hrtfs': No existe tal archivo o directorio
Makefile: 2389: la receta para el objetivo 'package-win-common' falló
make: *** [package-win-common] Error 1

Solución : cree manualmente un archivo vacío hrtfs en la carpeta compartida del directorio raíz vlc3.0.4

La carpeta vlc-3.0.4 se generará bajo win32, y luego

cd vlc-3.0.4
find .-name "*.dll" -type f|xargs -i strip --strip-all {} Eliminar información de depuración

Copie toda la carpeta vlc-3.0.4 a la prueba local y todo será normal al reproducir archivos y transmisiones de red.

Finalmente, comparta algunos archivos utilizados

Enlace: https://pan.baidu.com/s/1Pqu5dPW_8oEKxJmR_x09Jg 
Código de extracción: 134a


 

 

 

Supongo que te gusta

Origin blog.csdn.net/zhuquanfu/article/details/83505531
Recomendado
Clasificación