Синтаксическая ошибка: "(" неожиданно при выполнении скомпилированной c-программы

Я новичок в linux / script / command / etc …

Я пытаюсь выполнить программу c двоичного файла c в оболочке (эта программа была скомпилирована на другом компьютере:

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

в командной строке:

 $ sudo ./acqv paramA paramB paramC 

и я получил это сообщение

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

Я проверил привилегии скрипта

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

Нужно ли мне иметь специальную библиотеку для ее выполнения?

  • Загружать службу в Linux программно
  • Где определена структура blkid_struct_dev?
  • построение кода из исходного кода и добавление их к вашему пути
  • Где исходный код реализации «scanf»?
  • Как проверить, является ли процесс демоном или нет?
  • uXlib.h В каком пакете есть этот файл lib?
  • Запись на stdout, кроме перенаправления вывода C
  • Запись и отображение информации о загрузочном процессе в Linux
  • One Solution collect form web for “Синтаксическая ошибка: "(" неожиданно при выполнении скомпилированной c-программы”

    Вы указали достаточно информации, чтобы определить, в чем проблема, но не как ее исправить.

    Сообщение «Синтаксическая ошибка:» («неожиданно», очевидно, происходит из оболочки. Почему оболочка пытается выполнить ваш двоичный файл? Потому что ядро ​​пыталось и сдавалось. Когда это происходит, sudo решает, что это может быть сценарий оболочки, правильный заголовок и пытается вызвать оболочку по своему выбору (sudo пытается запустить sh ).

    Почему ядро ​​не запускало программу? Поскольку исполняемый файл не поддерживается в поддерживаемом формате. Это не просто из-за компиляции неправильной архитектуры (например, попытка запустить 64-разрядный двоичный код x86 в 32-разрядной системе или наоборот) или для неправильной операционной системы (например, попытка запустить исполняемый файл FreeBSD на Linux): ядро ​​не распознает файл как находящийся в исполняемом формате вообще. Например, если вы попытались запустить это в Linux, то это означает, что у вас нет бинарных файлов ELF . Среди обычных операционных систем попытка запустить двоичный файл macOS для Linux или наоборот приведет к этому.

    Обратите внимание, что проблема связана не с плохими разрешениями или отсутствием библиотек. Если любая из этих проблем была проблемой, ядро ​​сообщило бы о другой ошибке, и sudo не попытается запустить оболочку вместо этого.

    Решение состоит в том, чтобы скомпилировать программу для правильной операционной системы и правильной архитектуры. Если вы не можете скомпилировать на том же компьютере, где вы запускаете программу, вам может потребоваться настроить кросс-компилятор . Если у вас нет возможности перекомпилировать программу, может быть способ запустить ее в эмуляторе, но это, как правило, намного сложнее и медленнее, чем перекомпиляция, поэтому попробуйте сделать это только в крайнем случае.

    Linux и Unix - лучшая ОС в мире.