Todo o registro do processo de compilação cruzada de vlc3.0.4 no ubuntu16.04x64

    Depois de jogar por muito tempo nos fins de semana, depois de problemas contínuos, localizando problemas e resolvendo problemas, finalmente compilei e passei com sucesso a versão mais recente do vlc e tentei várias versões de compilação no meio, como vlc3. A versão .x foi compilado, você pode consultar: plataforma ubuntu, compilação cruzada VLC/LibVLC, gerar versão win32 e LibVLC adiciona interface de vídeo ) é relativamente próximo, deve ser fácil de compilar e passar, há muitos problemas se não é esperado, na verdade, é causado principalmente pela versão A interface não corresponde ao problema, então tentei várias versões do ubuntu 16.04x86, 16.04x64, 18.04x64, etc., e finalmente vi o fruto do sucesso, como se tivesse ganhado um grande prêmio. Bem, chega de fofoca, vamos registrar os problemas no processo de compilação.

   O ambiente de compilação é a versão ubuntu16.04x64 LTS instalada na máquina virtual do sistema win7. Não há nada a dizer sobre isso. Se você não estiver familiarizado, pode pesquisar você mesmo. Como a versão vlc3.x requer gcc/g++ para suportar c++11, a versão do gcc/g++ não deve ser muito baixa. Você pode verificar com o comando gcc --version. Eu uso a versão 4.9.3, que é maior que 4.9.0. Ambos suportam c++11.

Embora o documento    oficial de compilação diga que definitivamente falhará ao compilar, você ainda precisa consultá-lo. Pelo menos você sabe como operar cada etapa.

   1. Ambiente Mingw-w64

Como o vlc usa principalmente a versão de 32 bits, instale o ambiente de compilação cruzada x86 diretamente:

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

2. Conjunto de ferramentas de desenvolvimento

As ferramentas relevantes das quais o processo de compilação vlc depende, etc., podem ser instaladas diretamente pelo 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

Após a conclusão da instalação, você precisa confirmar a versão do gettext, verifique gettext --version, vlc-3.x requer  gettext>=0.19.8 , mas a fonte oficial do ubuntu só é atualizada para 0.19.7, se o versão é baixa, instale-a 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/

./configure --prefix=/usr

sudo make && sudo make install

3. Instale bibliotecas de terceiros

Primeiro baixe o código-fonte de vlc3.0.4. É recomendado fazer o download manualmente do diretório ftp oficial . O que o git obtém pode não ser a versão mais recente.

Após descompactar o código-fonte, entre no diretório vlc e inicie a operação:

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

Se você for avisado que HOST-TRIPLET não pode ser reconhecido, você pode alterá-lo diretamente para i686-w64-mingw32.

O método make fetch é usado aqui ao invés do método make prebuilt, porque os arquivos da biblioteca do prebuilt são relativamente antigos e precisam esperar um pouco.

Quarto, compile vlc

Volte para o diretório vlc e inicie a operação

./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   
encontrou os seguintes problemas:

1、cp ../../contrib/tarballs/dxgi1_2.idl dxgi12 && cd dxgi12 && patch -fp1 < ../../../contrib/src/d3d11/dxgi12.patch
patching arquivo 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: erro: erro de sintaxe, inesperado aKNOWNTYPE, esperando tIMPORT
../../contrib/src /d3d11/rules.mak:63: receita para o alvo '/home/vlc/vlc/contrib/i686-w64-mingw32/include/dxgi1_2.h' falhou
ao fazer: *** [/home/vlc/vlc/contrib/ i686-w64-mingw32/include/dxgi1_2.h] Erro 1
Aviso :
sudo apt-get install wine64-development-tools 
Modifique IDL_INC_PATH = /usr/include/wine/windows/ em contib\src\d3d9\rules.mak para IDL_INC_PATH = /usr/include/wine-development/windows/ modifique IDL_INC_PATH em contrib\src\d3d11\ rules.mak =
/ usr/include/wine/windows/ para IDL_INC_PATH = /usr/include/wine-development/windows/

2. erro versioninfo.rc:

i686-w64-mingw32-windres: versioninfo.rc.in:21: erro de sintaxe 
i686-w64-mingw32-windres: falha no pré-processamento. 
Makefile:1224: receita para o destino 'versioninfo.lo' falhou 
make[2]: *** [versioninfo.lo] Erro 1 
make[2]: Saindo do diretório '/home/d/vlc-3.0.0/contrib/win32 /gcrypt/src' 
Makefile:487: receita para o alvo 'install-recursive' falhou 
make[1]: *** [install-recursive] Erro 1 
make[1]: Saindo do diretório '/home/d/vlc-3.0. 0/contrib/win32/gcrypt' 
../../contrib/src/gcrypt/rules.mak:72: receita para o alvo '.gcrypt' falhou 
make: *** [.gcrypt] Erro 2 

Solução :
modifique a linha 42 de contrib/win32/gcrypt/configure.ac  

Antes da modificação: m4_esyscmd([git rev-parse --short HEAD | tr -d '\n\r']))
Após a modificação: m4_esyscmd([printf %x $(wc -l < ​​debian/changelog)]) )

3. ../../contrib/src/protobuf/rules.mak:24: receita para o destino '.protobuf' falhou
make: *** [.protobuf] Erro 2
Solução :
Ver protobuf via protoc --version Version, você precisa atualizar o protobuf para a versão 3.0.1, para que seja consistente com a versão em contribuição, para evitar relatórios de erros novamente mais tarde

https://github.com/protocolbuffers/protobuf/releases/  (Este endereço pode exigir FQ, vou colocar o arquivo no disco de rede)

Após a conclusão da configuração, execute sudo make e os seguintes erros serão relatados:

1、No arquivo incluído em ../../modules/access/dshow/dshow.cpp:52:0:
../../modules/access/dshow/access.h:33:24: erro fatal: wrl /client.h: A compilação de arquivo ou diretório não
foi encerrada.

Solução :
Baixe mingw-w64-mingw-w64 de https://forum.videolan.org/viewtopic.php?f=32&t=137580&p=453684&hilit=roapi.h%3A80%3A25#p453684
will mingw-w64-mingw- Copy toda a pasta wrl em w64/mingw-w64-headers/include para contrib/i686-w64-mingw32/include do pacote compilado

2、/usr/share/mingw-w64/include/roapi.h:60:33: error: 'Windows::Foundation::Initalize' declarado como uma variável 'inline' __inline HRESULT Inicialize (RO_INIT_TYPE it ^ /
     usr
                                 /
share /mingw-w64/include/roapi.h:60:33: erro: 'RO_INIT_TYPE' não foi declarado neste escopo
/usr/share/mingw-w64/include/roapi.h:64:7: erro: esperado ', ' ou ';' antes de '{' token
     ) { return RoInitialize (it); }
       ^
/usr/share/mingw-w64/include/roapi.h: Na função 'void Windows::Foundation::Uninitialize()':
/usr/share/mingw-w64/include/roapi.h:66:23 : erro: 'RoUninitialize' não foi declarado neste escopo
     { RoUninitialize (); }
                       ^
/usr/share/mingw-w64/include/roapi.h: No escopo global:
/usr/share/mingw-w64/include/roapi.h:74:35: error: 'ABI::Windows::Foundation:: Initialze' declarado como uma variável 'inline'
       __inline HRESULT Initialze (RO_INIT_TYPE it
                                   ^
/usr/share/mingw-w64/include/roapi.h:74:35: erro: 'RO_INIT_TYPE' não foi declarado neste escopo
/usr/share /mingw-w64/include/roapi.h:78:9: erro: esperado ',' ou ';' antes de '{' token
       ) { return RoInitialize (it); }
         ^
/usr/share/mingw-w64/include/roapi.h: Na função 'void ABI::Windows::Foundation::Uninitialize()':
/usr/share/mingw-w64/include/roapi.h: 80:25: erro: 'RoUninitialize' não foi declarado neste escopo
       { RoUninitialize (); }
                         ^
Makefile:25261: receita para o alvo 'access/dshow/dshow.lo' falhou
make[4]: *** [access/dshow/dshow.lo] Erro 1
Solução :
mingw-w64 - roapi .h dwrite.h dwrite_1.h dwrite_2.h versionhelpers.h e outros arquivos em mingw-w64/mingw-w64-headers/include são copiados para contrib/i686-w64-mingw32/include/, o que pode evitar os seguintes erros

3、stream_out/chromecast/cast_channel.pb.h:12:2: erro: #error Este arquivo foi gerado por uma versão mais recente do protoc que é
 #error Este arquivo foi gerado por uma versão mais recente do protoc que é
  ^
stream_out/chromecast /cast_channel.pb.h:13:2: erro: #error incompatível com seus cabeçalhos de buffer de protocolo. Atualize
 #error incompatível com seus cabeçalhos de buffer de protocolo. Atualize
  ^
stream_out/chromecast/cast_channel.pb.h:14:2: error: #error your headers.
 #error seus cabeçalhos.
  ^
No arquivo incluído em stream_out/chromecast/cast_channel.pb.h:22:0,
                 em ../../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: aviso: "_MSC_VER" não está definido [-Wundef]
 #if _MSC_VER >= 1300 && !defined(__INTEL_COMPILER)
     ^
No arquivo incluído de ../../modules/stream_out/chromecast/chromecast.h:45:0,
                 de ../../modules/stream_out/chromecast/cast.cpp:33:
stream_out/chromecast/cast_channel.pb.h:25:60: erro fatal: google/protobuf/generated_message_table_driven.h: nenhum arquivo ou
compilação de diretório encerrada .
Makefile:25196: receita para o destino 'stream_out/chromecast/libstream_out_chromecast_plugin_la-cast.lo' falhou
make[4]: *** [stream_out/chromecast/libstream_out_chromecast_plugin_la-cast.lo] Erro 1
Solução : Instale a versão protobuf3.0.1, se já estiver instalado, este erro não deve ser relatado

4、/home/zqf/vlc/contrib/i686-w64-mingw32/include/versionhelpers.h: Na função 'IsWindows8Point1OrGreater':
/home/zqf/vlc/contrib/i686-w64-mingw32/include/versionhelpers.h: 70:45: erro: '_WIN32_WINNT_WINBLUE' não declarado (primeiro uso nesta função)
     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 não declarado é relatado apenas uma vez para cada função que aparece em
/home/zqf/vlc/contrib/ i686-w64-mingw32/include/versionhelpers.h: Na função 'IsWindowsThresholdOrGreater':
/home/zqf/vlc/contrib/i686-w64-mingw32/include/versionhelpers.h:74:45: erro: '_WIN32_WINNT_WINTHRESHOLD' não declarado (primeiro uso nesta função)
     return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINTHRESHOLD), LOBYTE(_WIN32_WINNT_WINTHRESHOLD) , 0
) ;

Modifique o arquivo versionhelpers.h copiado para contrib/i686-w64-mingw32/include/, altere _WIN32_WINNT_WINBLUE e _WIN32_WINNT_WINTHRESHOLD para _WIN32_WINNT_WIN8

Extra : Aqui está a linha do SDKDDKVer.h para Windows 10 (que codifica o valor para cada versão do Windows):

// // Constantes de versão _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

Após a conclusão do make, execute a operação de empacotamento e geração de arquivos relacionados ao Windows:

tornar pacote-ganha-comum

Na primeira vez que o empacotamento é bem-sucedido, nenhum erro é relatado, na segunda vez, o seguinte erro é relatado:

cp: não é possível stat '../share/hrtfs': Arquivo ou diretório inexistente
Makefile:2389: receita para o destino 'package-win-common' falhou
make: *** [package-win-common] Erro 1

Solução : crie manualmente um arquivo vazio hrtfs na pasta de compartilhamento do diretório raiz vlc3.0.4

A pasta vlc-3.0.4 será gerada em win32 e, em seguida,

cd vlc-3.0.4
find .-name "*.dll" -type f | xargs -i strip --strip-all {} Remover informações de depuração

Copie toda a pasta vlc-3.0.4 para o teste local e tudo estará normal ao reproduzir arquivos e fluxos de rede.

Finalmente, compartilhe alguns arquivos usados

Link: https://pan.baidu.com/s/1Pqu5dPW_8oEKxJmR_x09Jg 
Código de extração: 134a


 

 

 

Acho que você gosta

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