语法错误:执行编译的 C 程序时出现意外的“(”

语法错误:执行编译的 C 程序时出现意外的“(”

我尝试执行c二进制文件ACQVShell 中的程序(该程序在另一台计算机上编译如下:

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

我需要有一个特殊的库来执行它吗?

答案1

您提供了足够的信息来确定问题是什么,但没有提供解决方法。

消息“语法错误:“(”意外”显然来自 shell。为什么 shell 试图执行您的二进制文件?因为内核尝试并放弃了。当发生这种情况时,sudo 认为这可能是一个缺少A正确的标题并尝试调用它选择的 shell(sudo 尝试运行sh)。

为什么内核无法运行程序?因为可执行文件的格式不受支持。它甚至不仅仅是由于编译为错误的体系结构(例如,尝试在 32 位系统上运行 64 位 x86 二进制文件,反之亦然)或错误的操作系统(例如,尝试在 32 位系统上运行 FreeBSD 可执行文件) Linux):内核根本无法将该文件识别为可执行格式。例如,如果您尝试在 Linux 上运行此程序,则意味着您所拥有的不是极低频二进制。在常见的操作系统中,尝试在 Linux 上运行 macOS 二进制文件会导致这种情况,反之亦然。

请注意,该问题不是由于权限错误或缺少库造成的。如果其中任何一个是问题所在,内核将报告不同的错误,并且 sudo 不会尝试运行 shell。

解决方案是为正确的操作系统和正确的体系结构编译程序。如果您无法在运行程序的同一台机器上进行编译,则可能需要设置一个交叉编译器。如果您无法重新编译程序,可能有一种方法可以在模拟器中运行它,但这通常比重新编译要困难得多且慢得多,因此只能将其作为最后的手段。

相关内容