Erro de sintaxe: “(” inesperado quando executar um programa c compilado

1

Eu tento executar o programa acqv do arquivo binário c no Shell (este programa foi compilado assim em outro computador:

gcc acqv170104.c -o acqv 'mysql_config --cflags --libs'

a linha de comando:

$ sudo ./acqv paramA paramB paramC

e recebi essa mensagem

acqv: 1: acqv: Syntax error: "(" unexpected

Eu verifiquei os privilégios do script

-rwxrwxrwx  1      root      root      20472 Jan 10 14:20 acqv

Preciso de uma biblioteca especial para executá-la?

    
por sincos 10.01.2017 / 23:38

1 resposta

5

Você forneceu informações suficientes para determinar qual é o problema, mas não como corrigi-lo.

A mensagem 'Erro de sintaxe: "(" inesperado "evidentemente vem de um shell. Por que um shell está tentando executar seu binário? Porque o kernel tentou e desistiu. Quando isso acontece, o sudo decide que isso pode ser um shell script que carece de um cabeçalho adequado e tenta invocar um shell de sua escolha (o sudo tenta executar sh ).

Por que o kernel falhou ao executar o programa? Porque o executável não está em um formato suportado. Não é meramente devido a ser compilado para a arquitetura errada (por exemplo, tentar executar um binário x86 de 64 bits em um sistema de 32 bits ou vice-versa) ou para o sistema operacional errado (por exemplo, tentar executar um executável do FreeBSD Linux): o kernel não reconhece o arquivo como estando em um formato executável. Por exemplo, se você tentou executar isso no Linux, significa que o que você tem não é um binário ELF . Entre os sistemas operacionais comuns, a tentativa de executar um binário macOS no Linux ou vice-versa causaria isso.

Observe que o problema não se deve a permissões inválidas ou a bibliotecas ausentes. Se qualquer um deles fosse o problema, o kernel reportaria um erro diferente e o sudo não tentaria rodar um shell.

A solução é compilar o programa para o sistema operacional correto e a arquitetura correta. Se você não puder compilar na mesma máquina em que você executa o programa, talvez seja necessário configurar um compilador cruzado . Se você não tem como recompilar o programa, pode haver uma maneira de executá-lo em um emulador, mas isso geralmente é muito mais difícil e lento do que recompilar, portanto, tente-o apenas como último recurso.

    
por 11.01.2017 / 01:44

Tags