L'enregistrement complet du processus de compilation croisée de vlc3.0.4 sur ubuntu16.04x64

    Après avoir tourné pendant longtemps le week-end, après des problèmes continus, la localisation de problèmes et la résolution de problèmes, j'ai finalement réussi à compiler et à passer la dernière version de vlc, et j'ai essayé plusieurs versions de compilation au milieu, comme vlc3. a été compilé, vous pouvez vous référer à : la plate-forme ubuntu, la compilation croisée VLC/LibVLC, générer la version win32 et LibVLC ajoute une interface vidéo ) est relativement proche, il devrait être facile à compiler et à passer, il y a beaucoup de problèmes s'il n'est pas prévu, en fait, c'est principalement causé par la version L'interface ne correspond pas au problème, j'ai donc essayé différentes versions d'ubuntu 16.04x86, 16.04x64, 18.04x64, etc., et j'ai finalement vu le fruit du succès, comme si j'avais gagné un gros lot. Eh bien, assez de commérages, enregistrons les problèmes dans le processus de compilation.

   L'environnement de compilation est la version ubuntu16.04x64 LTS installée dans la machine virtuelle du système win7. Il n'y a rien à dire à ce sujet. Si vous ne la connaissez pas, vous pouvez la rechercher vous-même. Étant donné que la version vlc3.x nécessite gcc/g++ pour prendre en charge c++11, la version de gcc/g++ ne doit pas être trop basse. Vous pouvez le vérifier avec la commande gcc --version. J'utilise la version 4.9.3, qui est supérieur à 4.9.0. Les deux prennent en charge c++11.

Bien que le document de compilation    officiel indique qu'il échouera définitivement à compiler, vous devez toujours vous y référer.Au moins, vous savez comment opérer chaque étape.

   1. Environnement Mingw-w64

Étant donné que vlc utilise principalement la version 32 bits, installez directement l'environnement de compilation croisée x86 :

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

2. Ensemble d'outils de développement

Les outils pertinents dont dépend le processus de compilation vlc, etc., peuvent être installés directement par commande.

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

Une fois l'installation terminée, vous devez confirmer la version de gettext, vérifiez gettext --version, vlc-3.x nécessite  gettext>=0.19.8 , mais la source officielle d'ubuntu n'est mise à jour que vers 0.19.7, si le la version est basse, installez-la manuellement 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/

./configure --prefix=/usr

sudo make && sudo make install

3. Installez des bibliothèques tierces

Téléchargez d'abord le code source de vlc3.0.4. Il est recommandé de le télécharger manuellement à partir du répertoire ftp officiel . Ce que git obtient peut ne pas être la dernière version.

Après avoir décompressé le code source, entrez dans le répertoire vlc et lancez l'opération :

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

Si vous êtes averti que HOST-TRIPLET ne peut pas être reconnu, vous pouvez le changer directement en i686-w64-mingw32.

La méthode de make fetch est utilisée ici au lieu de la méthode de make prebuilt, car les fichiers de bibliothèque de prebuilt sont relativement anciens et doivent attendre un certain temps.

Quatrièmement, compilez vlc

Retournez dans le répertoire vlc et lancez l'opération

./bootstrap
mkdir win32
cd win32
export PKG_CONFIG_LIBDIR=$HOME/vlc/contrib/i686-w64-mingw32/lib/pkgconfig
export CFLAGS="-O2"
export CXXFLAGS="-O2"
../configure --host=i686- w64-mingw32   
a rencontré les problèmes suivants :

1、cp ../../contrib/tarballs/dxgi1_2.idl dxgi12 && cd dxgi12 && patch -fp1 < ../../../contrib/src/d3d11/dxgi12.patch
patching file 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: erreur : erreur de syntaxe, aKNOWNTYPE inattendu, attend tIMPORT
../../contrib/src /d3d11/rules.mak:63 : la recette pour la cible '/home/vlc/vlc/contrib/i686-w64-mingw32/include/dxgi1_2.h' a échoué
make : *** [/home/vlc/vlc/contrib/ i686-w64-mingw32/include/dxgi1_2.h] Erreur 1
: sudo
apt-get install wine64-development-tools 
Modifier IDL_INC_PATH = /usr/include/wine/windows/ dans contib\src\d3d9\rules.mak en IDL_INC_PATH = /usr/include/wine-development/windows/ modifier IDL_INC_PATH dans contrib\src\d3d11\ rules.mak =
/ usr/include/wine/windows/ pour IDL_INC_PATH = /usr/include/wine-development/windows/

2. erreur versioninfo.rc :

i686-w64-mingw32-windres : versioninfo.rc.in:21 : erreur de syntaxe 
i686-w64-mingw32-windres : échec du prétraitement. 
Makefile:1224 : la recette pour la cible 'versioninfo.lo' a échoué 
make[2] : *** [versioninfo.lo] Erreur 1 
make[2] : quitter le répertoire '/home/d/vlc-3.0.0/contrib/win32 /gcrypt/src' 
Makefile:487 : la recette pour la cible 'install-recursive' a échoué 
make[1] : *** [install-recursive] Erreur 1 
make[1] : Départ du répertoire '/home/d/vlc-3.0. 0/contrib/win32/gcrypt' 
../../contrib/src/gcrypt/rules.mak:72: la recette pour la cible '.gcrypt' a échoué 
make: *** [.gcrypt] Erreur 2 

Solution :
Modifier la ligne 42 de contrib/win32/gcrypt/configure.ac  

Avant modification : m4_esyscmd([git rev-parse --short HEAD | tr -d '\n\r']))
Après modification : m4_esyscmd([printf %x $(wc -l < ​​​​debian/changelog)]) )

3. ../../contrib/src/protobuf/rules.mak:24: la recette pour la cible '.protobuf' a échoué
make: *** [.protobuf] Erreur 2
Solution :
Afficher protobuf via protoc --version Version, vous devez mettre à jour protobuf vers la version 3.0.1, afin qu'il soit cohérent avec la version de contribution, afin d'éviter de signaler à nouveau des erreurs ultérieurement

https://github.com/protocolbuffers/protobuf/releases/  (Cette adresse peut nécessiter FQ, je mettrai le fichier sur le disque réseau)

Une fois la configuration terminée, exécutez sudo make et les erreurs suivantes sont signalées :

1. Dans le fichier inclus à partir de ../../modules/access/dshow/dshow.cpp:52:0 :
../../modules/access/dshow/access.h:33:24 : erreur fatale : wrl /client.h : aucune
compilation de ce type de fichier ou de répertoire n'a été terminée.

Solution :
Télécharger mingw-w64-mingw-w64 depuis https://forum.videolan.org/viewtopic.php?f=32&t=137580&p=453684&hilit=roapi.h%3A80%3A25#p453684
mingw-w64-mingw- Copie l'intégralité du dossier wrl sous w64/mingw-w64-headers/include vers contrib/i686-w64-mingw32/include du paquet compilé

2、/usr/share/mingw-w64/include/roapi.h:60:33: erreur : 'Windows::Foundation::Initalize' déclaré comme variable 'inline' __inline HRESULT Initalize (RO_INIT_TYPE it ^ /
     usr
                                 /
share /mingw-w64/include/roapi.h:60:33 : erreur : 'RO_INIT_TYPE' n'a pas été déclaré dans cette portée
/usr/share/mingw-w64/include/roapi.h:64:7 : erreur : attendu ', ' ou ';' avant '{' token
     ) { return RoInitialize (it); }
       ^
/usr/share/mingw-w64/include/roapi.h : Dans la fonction 'void Windows::Foundation::Uninitialize()' :
/usr/share/mingw-w64/include/roapi.h:66:23 : erreur : 'RoUninitialize' n'a pas été déclaré dans cette portée
     { RoUninitialize (); }
                       ^
/usr/share/mingw-w64/include/roapi.h : Au niveau global :
/usr/share/mingw-w64/include/roapi.h:74:35 : erreur : 'ABI::Windows::Foundation:: Initialze' déclaré comme variable 'inline'
       __inline HRESULT Initialze (RO_INIT_TYPE it
                                   ^
/usr/share/mingw-w64/include/roapi.h:74:35: error: 'RO_INIT_TYPE' n'a pas été déclaré dans cette portée
/usr/share /mingw-w64/include/roapi.h:78:9 : erreur : attendu ',' ou ';' avant '{' token
       ) { return RoInitialize (it); }
         ^
/usr/share/mingw-w64/include/roapi.h : Dans la fonction 'void ABI::Windows::Foundation::Uninitialize()' :
/usr/share/mingw-w64/include/roapi.h : 80:25 : erreur : 'RoUninitialize' n'a pas été déclaré dans cette portée
       { RoUninitialize (); }
                         ^
Makefile:25261: la recette pour la cible 'access/dshow/dshow.lo' a échoué
make[4]: *** [access/dshow/dshow.lo] Erreur 1
Solution :
mingw-w64 - roapi .h dwrite.h dwrite_1.h dwrite_2.h versionhelpers.h et d'autres fichiers dans mingw-w64/mingw-w64-headers/include sont copiés dans contrib/i686-w64-mingw32/include/, ce qui peut éviter les nombreuses erreurs suivantes

3、stream_out/chromecast/cast_channel.pb.h:12:2: error: #error Ce fichier a été généré par une version plus récente du protocole qui est
 #error Ce fichier a été généré par une version plus récente du protocole qui est
  ^
stream_out/chromecast /cast_channel.pb.h:13:2 : erreur : #error incompatible with your Protocol Buffer headers. Veuillez mettre à jour
 #error incompatible with your Protocol Buffer headers. Veuillez mettre à jour
  ^
stream_out/chromecast/cast_channel.pb.h:14:2: error: #error vos en-têtes.
 #error vos en-têtes.
  ^
Dans le fichier inclus de stream_out/chromecast/cast_channel.pb.h:22:0,
                 de ../../modules/stream_out/chromecast/chromecast.h:45,
                 depuis ../../modules/stream_out/chromecast/cast.cpp:33 :
 /home/zqf/vlc/contrib/i686-w64-mingw32/include/google/protobuf/io/coded_stream.h:1362:5 : avertissement : "_MSC_VER" n'est pas défini [-Wundef]
 #if _MSC_VER >= 1300 && !defined(__INTEL_COMPILER)
     ^
Dans le fichier inclus à partir de ../../modules/stream_out/chromecast/chromecast.h:45:0,
                 à partir de ../../modules/stream_out/chromecast/cast.cpp:33 : stream_out/chromecast/cast_channel.pb.h:25:60 : erreur fatale : google/protobuf/generated_message_table_drive.h : aucune compilation
de ce fichier ou répertoire n'est terminée
.
Makefile:25196 : la recette pour la cible 'stream_out/chromecast/libstream_out_chromecast_plugin_la-cast.lo' a échoué
make[4] : *** [stream_out/chromecast/libstream_out_chromecast_plugin_la-cast.lo] Erreur 1
Solution : Installez la version protobuf3.0.1, si elle est déjà installée, cette erreur ne doit pas être signalée

4、/home/zqf/vlc/contrib/i686-w64-mingw32/include/versionhelpers.h
 : 70:45 : erreur : '_WIN32_WINNT_WINBLUE' non déclaré (première utilisation dans cette fonction)
     return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINBLUE), LOBYTE(_WIN32_WINNT_WINBLUE), 0);
                                             ^
/home/zqf/vlc/contrib/i686-w64-mingw32/include/versionhelpers.h:70:45 : note : chaque identifiant non déclaré n'est signalé qu'une seule fois pour chaque fonction qu'il apparaît dans
/home/zqf/vlc/contrib/ i686-w64-mingw32/include/versionhelpers.h : dans la fonction 'IsWindowsThresholdOrGreater' :
/home/zqf/vlc/contrib/i686-w64-mingw32/include/versionhelpers.h:74:45 : erreur : '_WIN32_WINNT_WINTHRESHOLD' non déclaré (première utilisation dans cette fonction)
     return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINTHRESHOLD), LOBYTE(_WIN32_WINNT_WINTHRESHOLD) , 0);
解决方案

Modifiez le fichier versionhelpers.h copié dans contrib/i686-w64-mingw32/include/, changez _WIN32_WINNT_WINBLUE et _WIN32_WINNT_WINTHRESHOLD en _WIN32_WINNT_WIN8

Extra : Voici la ligne de SDKDDKVer.h pour Windows 10 (qui encode la valeur pour chaque version de Windows) :

// // Constantes de version _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_WIN NT_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

Une fois make terminé, effectuez l'opération d'empaquetage et de génération de fichiers liés à Windows :

faire paquet-gagnant-commun

La première fois que l'empaquetage réussit, aucune erreur n'est signalée, la deuxième fois, l'erreur suivante est signalée :

cp : impossible de stat '../share/hrtfs' : aucun fichier ou répertoire de ce
type

Solution : créez manuellement un fichier vide hrtfs sous le dossier de partage du répertoire racine vlc3.0.4

Le dossier vlc-3.0.4 sera généré sous win32, puis

cd vlc-3.0.4
find . -name "*.dll" -type f | xargs -i strip --strip-all {} Supprimer les informations de débogage

Copiez l'intégralité du dossier vlc-3.0.4 dans le test local, et tout est normal lors de la lecture de fichiers et de flux réseau.

Enfin, partagez quelques fichiers utilisés

Lien : https://pan.baidu.com/s/1Pqu5dPW_8oEKxJmR_x09Jg 
Code d'extraction : 134a


 

 

 

Je suppose que tu aimes

Origine blog.csdn.net/zhuquanfu/article/details/83505531
conseillé
Classement