Eu já li muitas discussões sobre várias possibilidades de por que tal coisa pode acontecer, mas todas são sobre alguma biblioteca em falta no sistema onde os binários estão implementados. Este não é o meu caso.
Eu tenho um Raspberry Pi 2 com o mais recente Raspbian e um notebook Debian 8 com arquitetura x86-64 da Intel e um Qt Creator 3.2.1 instalado no segundo, onde eu cruzo meus binários usando o arm-linux -gnueabihf-g ++ (usando o repositório Emdebian ). Não estou usando o compilador otimizado fornecido no repositório oficial do github RPi .
Aqui está prequal ao meu problema . Depois de muito suor e palavrões, consegui compilar e implantar meu binário do notebook no RPi2. E aqui está o problema:
-
Quando tento executar meu binário a partir do Qt Creator (que se conecta ao RPi2 via SSH, transfere arquivos via SFTP e faz login como meu único usuário RPi (por isso, "problema de acesso" é excluído aqui)) meu caderno recebo:
Erro de sintaxe: palavra inesperada (esperando ")")
-
Quando tento executar meu binário diretamente no meu RPi , ele é executado sem um único problema.
Como eu postei em stackoverflow, meu código contém apenas C ++ puro escrevendo um arquivo de texto no diretório onde o binário está em execução. Nada estranho acontecendo lá.
Então, a questão principal aqui é essa questão relacionada ao Criador do Qt ou algo muito mais profundo? Não tenho idéia de como exatamente o Qt Creator internamente executa o binário no sistema remoto. Se eu me conectar via SSH ao meu RPi via terminal e executar o binário, ele funciona bem. Então tem que fazer algo com o modo como o Qt Creator o executa. Note que a execução do binário ARM no meu notebook retorna o que todos esperamos (RPiCrossCompileRemoteTest é o nome do meu binário):
bash: ./RPiCrossCompileRemoteTest: cannot execute binary file: Exec format error
Então, o Qt Creator não inicia o binário diretamente no RPi nem tenta iniciá-lo no meu bloco de notas (caso contrário, ele teria me dado o erro de formatação de cima).
Alguma idéia de como posso proceder para resolver isso? Eu tenho lutado com essa questão por um par de dias todos em vão. : - /
EDIT: Conforme sugerido por @steve executando ldd
em ambos os executáveis:
O segundo está correto. Eu não sei o que pensar sobre o primeiro embora.
Também usei o g ++ - arm-linux-gnueabihf que está no meu Raspbian para compilar um novo binário para comparar ambos. A saída de ldd
é literalmente a mesma com a pequena exceção de que eu tenho endereços de memória diferentes (os números HEX entre colchetes) onde as libs serão carregadas.
EDIT 2:
Como @gogoud sugeriu:
- Alterado para a autenticação principal
- Concha marcada no meu RPi - é bash
- Adicionou
RequestTTY=force
a um recém-criado ~ / .ssh / config
Nenhuma mudança. Mesma história de sempre. No entanto, observei o código de saída real: 2 . De TLDP :
2: Misuse of shell builtins (according to Bash documentation)
Example: empty_function() {}
Comments: Missing keyword or command, or permission problem (and diff return code on a failed binary file comparison).
Isso não faz sentido para o meu binário (eu acho). Também verifiquei as permissões: drwxr-xr-x
. Isso significa que todos podem executá-lo e lê-lo.