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