“Falha ao carregar o plugin da plataforma” xcb “” ao iniciar o aplicativo qt5 no linux sem qt instalado

101

Eu escrevi um aplicativo para linux que usa Qt5.

Mas quando estou tentando iniciá-lo no linux sem Qt SDK instalado, a saída no console é:

Falha ao carregar o plugin da plataforma "xcb". As plataformas disponíveis são:

Como posso consertar isso? Posso precisar copiar algum arquivo de plugin? Quando eu uso o ubuntu com Qt5 instalado, mas mudo o nome do diretório Qt, o mesmo problema ocorre. Então, ele usa algum arquivo do diretório Qt ...

ATUALIZAÇÃO: quando eu crio na pasta "plataformas" do dir do aplicativo com o arquivo libqxcb.so , o aplicativo ainda não inicia, mas a mensagem de erro muda:

Falha ao carregar o plugin da plataforma "xcb". As plataformas disponíveis são:

xcb

Como isso pode acontecer? Como o plugin da plataforma pode estar disponível, mas não pode ser carregado?

locomoção
fonte
1
Só para esclarecer, as bibliotecas Qt estão realmente instaladas?
cmannett85
1
Se a biblioteca Qt estiver instalada, o programa funcionará normalmente. Se não estiver instalado ou se o diretório qt sdk não for encontrado, o programa não funciona.
locomoção
Certifique-se de copiar também libQt5Gui.so.5
edaniels
1
Para aqueles que vêm aqui do lançador Eve Online: Use eveonline.sh, não eveonline- o iniciador tem todas as bibliotecas agrupadas com versões especiais.
Ondra Žižka

Respostas:

59

Use ldd (man ldd) para mostrar as dependências da biblioteca compartilhada. Executando isso em libqxcb.so

.../platforms$ ldd libqxcb.so

mostra que xcb depende de libQt5DBus.so.5 além de libQt5Core.so.5 e libQt5Gui.so.5 (e muitos outros libs de sistema). Adicione libQt5DBus.so.5 à sua coleção de bibliotecas compartilhadas e você estará pronto para prosseguir.

Abe Mishler
fonte
1
Obrigado! Esse é exatamente o problema. libQt5DBus.so.5 deve ser listado na documentação junto com core e gui.
dzlatkov de
4
No meu caso sudo apt-get install libx11-xcb1resolveu o problema. Mas sua recomendação de uso lddfoi o que me indicou a biblioteca correta para instalar. Obrigado!
Daniel
4
No meu caso, também tive que adicionar libQt5XcbQpa.so.5 à pasta lib.
elsamuko
4
Se você ainda tiver esse problema após passar ldd, tente encontrar o plugins/platformsdiretório dentro de sua instalação do Qt. Tente copiar todo este diretório para o mesmo lugar que seu arquivo binário ou de biblioteca compartilhada. Se funcionar, você pode definir LD_LIBRARY_PATH(hacky) ou, como mencionado na resposta de @bossbarber QT_QPA_PLATFORM_PLUGIN_PATH,.
csl
1
No meu caso, eu não tinha o diretório / usr / bin / plataformas criado. Resolvido com: sudo ln -sf / usr / lib / x86_64-linux-gnu / qt5 / plugins / plataformas / / usr / bin /
gipsh
55

Conforme postado anteriormente, você precisa se certificar de instalar os plug-ins de plataforma ao implantar seu aplicativo. Dependendo de como você deseja implementar as coisas, existem dois métodos para dizer ao seu aplicativo onde os plug-ins da plataforma (por exemplo, plataformas / plugins / libqxcb.so) estão em tempo de execução, o que pode funcionar para você.

A primeira é exportar o caminho para o diretório por meio da variável QT_QPA_PLATFORM_PLUGIN_PATH.

QT_QPA_PLATFORM_PLUGIN_PATH=path/to/plugins ./my_qt_app

ou

export QT_QPA_PLATFORM_PLUGIN_PATH=path/to/plugins
./my_qt_app

A outra opção, que eu prefiro, é criar um arquivo qt.conf no mesmo diretório do seu executável. O conteúdo do qual seria:

[Paths]
Plugins=/path/to/plugins

Mais informações sobre isso podem ser encontradas aqui e em qt.conf

bossbarber
fonte
1
Uau! Muito obrigado! Não sabia sobre qt.conf, ele deveria estar na primeira página do FAQ de implantação
no meu caso por algum motivo o caminho dentro do qt.conf (Plugins = plugins) não foi reconhecido. Acabei fornecendo um arquivo qt.conf vazio, que permitia que os caminhos globais (codificados) fossem substituídos pelos padrões qt.conf, no meu caso a subpasta plugins no diretório app.
B Piltz
1
Estávamos nos perguntando por que LD_LIBRARY_PATHnão estava funcionando, mas QT_QPA_PLATFORM_PLUGIN_PATHfuncionou. Muito obrigado.
Ahmed Fasih de
1
2ª ou 3ª vez que chego a esta resposta e sempre ajuda.
kyb
26

Tentei iniciar meu binário, compilado com Qt 5.7, no Ubuntu 16.04 LTS onde o Qt 5.5está pré-instalado. Não funcionou.

No início, eu inspecionei o próprio binário lddcomo foi sugerido aqui, e "satisfiz" todas as dependências "não encontradas". Então, este This application failed to start because it could not find or load the Qt platform plugin "xcb"erro notório foi lançado.

Como resolver isso no Linux

Primeiramente você deve criar um platformsdiretório onde seu binário está, porque é o lugar onde o Qt procura pela biblioteca XCB. Copie libqxcb.soaqui. Eu me pergunto por que os autores de outras respostas não mencionaram isso.

Então você pode querer executar seu binário com QT_DEBUG_PLUGINS=1a variável de ambiente configurada para verificar quais dependências libqxcb.sonão estão "satisfeitas". (Você também pode usar lddpara isso conforme sugerido na resposta aceita).

A saída do comando pode ser assim:

me@xerus:/media/sf_Qt/Package$ LD_LIBRARY_PATH=. QT_DEBUG_PLUGINS=1 ./Binary
QFactoryLoader::QFactoryLoader() checking directory path "/media/sf_Qt/Package/platforms" ...
QFactoryLoader::QFactoryLoader() looking at "/media/sf_Qt/Package/platforms/libqxcb.so"
Found metadata in lib /media/sf_Qt/Package/platforms/libqxcb.so, metadata=
{
    "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
    "MetaData": {
        "Keys": [
            "xcb"
        ]
    },
    "className": "QXcbIntegrationPlugin",
    "debug": false,
    "version": 329472
}


Got keys from plugin meta data ("xcb")
loaded library "/media/sf_Qt/Package/platforms/libqxcb.so"
QLibraryPrivate::loadPlugin failed on "/media/sf_Qt/Package/platforms/libqxcb.so" : "Cannot load library /media/sf_Qt/Package/platforms/libqxcb.so: (/usr/lib/x86_64-linux-gnu/libQt5DBus.so.5: version `Qt_5' not found (required by ./libQt5XcbQpa.so.5))"
This application failed to start because it could not find or load the Qt platform plugin "xcb"
in "".

Available platform plugins are: xcb.

Reinstalling the application may fix this problem.
Aborted (core dumped)

Observe a libQt5DBus.so.5biblioteca com falha . Copie-o para o caminho de suas bibliotecas, no meu caso era o mesmo diretório onde meu binário está (portanto LD_LIBRARY_PATH=.). Repita esse processo até que todas as dependências sejam satisfeitas.

PS obrigado ao autor desta resposta para QT_DEBUG_PLUGINS=1.

Neurotransmissor
fonte
1
Descobri que embora houvesse dependências não especificadas em libQt5xcbQpa.so.5 e libQtDBus.so.5, ainda precisava adicionar a pasta de plataformas conforme você indica. Essa combinação fez funcionar.
BSD de
Alguém pode me indicar a explicação "For Dummies" de como corrigir esse erro? Não tenho ideia do que isso significa, preciso de instruções passo a passo de como resolver isso no linux.
John Smith
@JohnSmith é melhor se você nos contar o que exatamente não faz sentido para você. Então, vamos tentar elaborar.
Neurotransmissor
11

Ubuntu 16.04 64 bits. Eu peguei o problema sem motivos aparentemente. Na noite anterior, assisti a um filme na minha instância VideoLan, naquela noite eu gostaria de assistir a outro com VideoLan. O VLC simplesmente não queria ser executado por causa do erro na pergunta. Pesquisei um pouco no Google e encontrei a solução que resolveu meu problema: a partir de agora, o VLC pode ser executado como antes. A solução é este comando:

sudo ln -sf /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/ /usr/bin/

Não sou capaz de explicar quais são suas conseqüências, mas sei que cria algum elo simbólico ausente.

Francesco
fonte
2
Não use -f --forceflag até que você realmente saiba o que está fazendo. Isso pode causar outros problemas.
kyb
Isso foi o que resolveu para mim com o Ubuntu 18.04 (o aplicativo que apresenta o problema é o Rescue Time.) Apenas deixe o sinalizador -f desativado caso você já tenha um diretório lá.
Eloff
10

Tentei as partes principais de cada resposta, sem sucesso. O que finalmente corrigiu para mim foi exportar as seguintes variáveis ​​de ambiente:

LD_LIBRARY_PATH=/usr/local/lib:~/Qt/5.9.1/gcc_64/lib
QT_QPA_PLATFORM_PLUGIN_PATH=~/Qt/5.9.1/gcc_64/plugins/ 
Alan
fonte
Isso funcionou para mim no Ubuntu 17.10 (mas tendo esse problema desde 16.04!) export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu/. Infelizmente ele só consertou meu VLC, não o Virtualbox que tem o mesmo erro ...
Tails
Trabalhou no Ubuntu 18.04 para obter o texworks 0.6.2 instalado e funcionando.
XavierStuvw
8

Desde a versão 5, o Qt usa um sistema de abstração de plataforma (QPA) para abstrair da plataforma subjacente.

A implementação para cada plataforma é fornecida por plug-ins. Para o X11, é o plugin XCB. Veja os requisitos do Qt para X11 para mais informações sobre as dependências.

fechar
fonte
Então, eu só preciso instalar todos os pacotes da lista de dependências? E isso vai funcionar? Também encontrei o arquivo libqxcb.so no diretório QT SDK, mas colocá-lo no diretório usr / lib não resolveu meu problema.
locomoção
A página Implementando um Aplicativo em Plataformas X11 deve conter todas as informações de que você precisa.
encerramento de
Instalei todos os pacotes mencionados nessa página, mas não ajudou. Encontrei a informação de que os plugins da plataforma devem estar no diretório do executável na pasta "plataformas". Coloquei lá o plugin xcb, agora o erro mudou: "Falha ao carregar o plugin da plataforma" xcb ". As plataformas disponíveis são: xcb"
locomoção
1
@cloose Está morto novamente :(
user89
@ user89 não é para mim. problema temporário talvez?
encerramento de
6

Provavelmente isso vai ajudar. Estou usando o Ubuntu 18.04 e quando instalei o Krita usando o método ppa. Eu tenho este erro:

Esta aplicação falhou ao iniciar porque não conseguiu encontrar ou carregar o plugin da plataforma Qt "xcb" em "".

Os plug-ins de plataforma disponíveis são: linuxfb, minimal, minimalegl, offscreen, wayland-egl, wayland, xcb.

Reinstalar o aplicativo pode resolver esse problema. Abortado

Tentei todas as soluções que encontrei neste tópico e outras webs sem sucesso.

Finalmente, encontrei um post onde o autor menciona que é possível ativar a depuração do qt5 usando este comando simples:

export QT_DEBUG_PLUGINS=1

Depois de adicionar este comando, executei novamente o krita . Obtive o mesmo erro, mas agora sei a causa.

libxcb-xinerama.so.0: não é possível abrir o arquivo de objeto compartilhado: Não existe esse arquivo ou diretório.

Este erro impede que o "xcb" carregue corretamente. Então a solução será instalar o `libxcb-xinerama.so.0" certo? Porém, quando eu executar o comando:

sudo apt install libxcb-xinerama

Eu o lib foi instalado. Então eu usei um velho truque sim--reinstall

sudo apt install --reinstall libxcb-xinerama

Este último comando resolveu meu problema.

Teocci
fonte
6

Pode haver muitas causas para esse problema. A chave é usar

export QT_DEBUG_PLUGINS=1

antes de executar seu aplicativo Qt. Em seguida, inspecione a saída, que indicará a direção do erro. No meu caso foi:

Cannot load library /opt/nao/plugins/platforms/libqxcb.so: (/opt/nao/bin/../lib/libz.so.1: version `ZLIB_1.2.9' not found (required by /usr/lib/x86_64-linux-gnu/libpng16.so.16))

Mas isso é resolvido em tópicos diferentes. Veja, por exemplo, https://stackoverflow.com/a/50097275/2408964 .

até
fonte
: facepalm: OMG, este mesmo conselho novamente. Não, isso não fornece nenhuma informação útil, apenas uma versão muito mais detalhada do mesmo erro exato. Nenhuma sugestão ou pista para qualquer outra coisa para olhar. Nada faltando, nada "não pode carregar" que eu já não soubesse.
John Smith
2

Eu enfrentei o mesmo problema após instalar o Viber. Ele tinha todas as bibliotecas qt necessárias /opt/viber/plugins/. Eu verifiquei dependências de /opt/viber/plugins/platforms/libqxcb.soe encontrei dependências ausentes. Eram libxcb-render.so.0, libxcb-image.so.0, libxcb-icccm.so.4, libxcb-xkb.so.1 Então eu resolvi meu problema instalando pacotes perdidos com este bibliotecas:

apt-get install libxcb-xkb1 libxcb-icccm4 libxcb-image0 libxcb-render-util0

Sergey P. também conhecido como azul
fonte
Tive um problema ao iniciar o Emulador Tizen. Isso ajudou. Obrigado.
AlexM
2

Então, passei cerca de um dia tentando descobrir qual era o problema; tentei todas as soluções propostas, mas nenhuma funcionou como instalar libs xcb ou exportar a pasta de plugins Qt. A solução que sugeriu usarQT_DEBUG_PLUGINS=1 para depurar o problema não me forneceu uma visão direta como na resposta - em vez disso, eu estava obtendo algo sobre símbolos não resolvidos dentro do Qt5Core.

Isso me deu uma dica: e se ele estiver tentando usar arquivos diferentes de instalações Qt diferentes? Na minha máquina eu tinha a versão padrão instalada em/home/username/Qt/ e algumas compilações locais dentro do meu projeto que compilei por mim mesmo (tenho outros kits personalizados de construção também em outros locais). Sempre que tentava usar qualquer um dos kits (instalados pela ferramenta de manutenção Qt ou construídos por mim), recebia um "erro xcb".

A solução era simples: fornecer o caminho Qt através CMAKE_PREFIX_PATHe não Qt5_DIRcomo eu fiz, e isso resolveu o problema. Exemplo:

cmake .. -DCMAKE_PREFIX_PATH=/home/username/Qt/5.11.1/gcc_64

Vicrucann
fonte
Oh, cara, o que há com o mundo Linux, onde cada solução na web fornece erros inesperados em vez de funcionar? Sempre? Três dias agora tentando obter um desktop funcional em uma instalação padrão do Ubuntu. Não, para quem vem aqui do Google: esta solução não funciona melhor do que qualquer outra coisa nesta página. Estou começando a achar que o Linux realmente não funciona.
John Smith
2

Encontrei um problema muito semelhante com a mesma mensagem de erro. Primeiro, depure alguns ativando a impressora Qt Debug com o comando de linha de comando:

exportar QT_DEBUG_PLUGINS = 1

e execute novamente o aplicativo. Para mim, isso revelou o seguinte:

"Não é possível carregar a biblioteca /home/.../miniconda3/lib/python3.7/site-packages/PyQt5/Qt/plugins/platforms/libqxcb.so: (libxkbcommon-x11.so.0: não é possível abrir o arquivo de objeto compartilhado: Não existe tal arquivo ou diretório)"

"Não é possível carregar a biblioteca /home/.../miniconda3/lib/python3.7/site-packages/PyQt5/Qt/plugins/platforms/libqxcb.so: (libxkbcommon-x11.so.0: não é possível abrir o arquivo de objeto compartilhado: Não existe tal arquivo ou diretório)"

Na verdade, estava faltando libxkbcommon-x11.so.0 e libxkbcommon-x11.so.0. Em seguida, verifique sua arquitetura usando dpkg na linha de comando do Linux. (Para mim, o comando "arch" deu um resultado diferente e inútil)

dpkg --print-architecture #result for me: amd64

Em seguida, pesquisei "libxkbcommon-x11.so.0 ubuntu 18.04 amd64" e, da mesma forma, libxkbcommon-x11.so.0, que produz esses pacotes em packages.ubuntu.com. Isso me disse, em retrospecto, sem surpresa, que estou faltando pacotes chamados libxkbcommon-x11-0 e libxkbcommon0, e que a instalação desses pacotes incluirá os arquivos necessários, mas as versões dev não. Então a solução:

sudo apt-get update

sudo apt-get install libxkbcommon0

sudo apt-get install libxkbcommon-x11-0

Schroeder
fonte
1

No meu caso, precisei implantar dois aplicativos Qt em um convidado virtualbox do Ubuntu. Um era linha de comando ("app"), o outro baseado em GUI ("app_GUI").

Usei o "app ldd" para descobrir quais são as bibliotecas necessárias e as copiei para o convidado do Ubuntu. Enquanto o executável de linha de comando "app" funcionava bem, o executável baseado em GUI travou, gerando o erro "Falha ao carregar o plugin da plataforma" xcb ". Eu verifiquei ldd para libxcb.so, mas também não havia dependências ausentes.

O problema parecia ser que, embora eu tivesse copiado todas as bibliotecas certas, acidentalmente copiei também as bibliotecas que já estavam presentes no sistema convidado .. o que significa que (a) elas eram desnecessárias para copiá-las em primeiro lugar e (b) pior , copiá-los produziu incompatibilidades entre as bibliotecas instaladas. Pior ainda, eles eram indetectáveis ​​pelo ldd como eu disse ..

A solução? Certifique-se de copiar as bibliotecas mostradas como ausentes pelo ldd e absolutamente nenhuma biblioteca extra .

Giorgos Sfikas
fonte
E eu resolvo meu problema usando este conselho, como?
John Smith
1

No meu caso, arquivos de cabeçalho ausentes foram o motivo pelo qual libxcbnão foi criado pelo Qt. Instalá-los de acordo com https://wiki.qt.io/Building_Qt_5_from_Git#Linux.2FX11 resolveu o problema:

yum install libxcb libxcb-devel xcb-util xcb-util-devel mesa-libGL-devel libxkbcommon-devel
Woltan
fonte
1
Sim, acho que tive um problema semelhante. Até compilei o qt da fonte, mas não notei que o xcb-toolchain não era normal em meu sistema, então as partes qt-xcb não foram instaladas.
shevy
1

Gosto da solução com qt.conf.

Coloque qt.confpróximo ao executável com as próximas linhas:

[Paths]
Prefix = /path/to/qtbase

E funciona perfeitamente: ^)

Para um exemplo prático:

[Paths]
Prefix = /home/user/SDKS/Qt/5.6.2/5.6/gcc_64/

A documentação sobre isso está aqui: https://doc.qt.io/qt-5/qt-conf.html

kyb
fonte
E eu "coloquei qt.conf perto do executável" como, exatamente?
John Smith
Crie um arquivo com o conteúdo apresentado. cd path/to/executable; vim qt.conf, colar. Salvar e sair.
kyb
O mesmo link já está em resposta
kyb
0

Eu vinculo todas as coisas do Qt estaticamente às compilações genéricas do Linux de meus projetos de código aberto. Isso torna a vida um pouco mais fácil. Você só precisa construir versões estáticas das bibliotecas Qt primeiro. É claro que isso não pode ser aplicado a software de código fechado devido a problemas de licenciamento. A implantação de aplicativos Qt5 no Linux é atualmente um pouco problemática, porque o Ubuntu 12.04, por exemplo, não possui bibliotecas Qt5 nos repositórios de pacotes.

confusão
fonte
0

Eu tive esse problema e, por pressentimento, removi os Qt Configs do meu ambiente. Ou seja,

rm -rf ~/.config/Qt*

Então eu iniciei o qtcreator e ele se reconfigurou com o estado existente da máquina. Não lembrava mais onde meus projetos estavam, mas isso apenas significava que eu tinha que navegar até eles "pela primeira vez" novamente.

Mas o mais importante, ele construiu um conjunto coerente de caminhos de biblioteca, para que eu pudesse reconstruir e executar meus executáveis ​​de projeto novamente sem que as bibliotecas xcb ou qxcb fossem perdidas.

Blair Houghton
fonte
Qtcreator apresenta exatamente o mesmo erro que estou tentando resolver. Claro. Porque se eu encontrasse ao menos uma solução que funcionasse para qualquer problema do Linux na web, não seria o Linux. Desculpe, isso é incrivelmente frustrante, uma página inteira de SE de perseguições de ganso selvagem sem uma única solução utilizável nela para simplesmente obter um painel de desktop rodando em uma instalação Ubuntu padrão sem erros. Estou ficando muito duvidoso de que o Linux realmente funcione bem.
John Smith
Isso não ajudou no meu caso.
Eugene Gr. Philippov
-4

sudo ln -sf /usr/lib/...."adapt-it"..../qt5/plugins/platforms/ / usr / bin /

Ele cria o link simbólico que perdeu. Bom para QT! Bom para VLC !!

Jujuuj
fonte
2
explique sua resposta
Anantha Raju C
Não funciona. Porque nada funciona. Esta página está 100% errada, nenhuma das "soluções" aqui funciona.
John Smith
@JohnSmith a julgar pela quantidade de votos positivos nas respostas, algumas delas certamente funcionam para algumas pessoas. Infelizmente, nada funciona para você e posso entender sua frustração. Mas se nada funcionar, tente fazer sua própria pesquisa e envie uma resposta que funcione no seu caso. Quer dizer, você está usando a plataforma há 5 anos e tem apenas 6 respostas? Eu humildemente sugeriria retribuir à comunidade em vez de reclamar. Estamos aqui para ajudar uns aos outros.
Neurotransmissor