구문 오류: 컴파일된 C 프로그램을 실행하는 동안 예기치 않은 "("가 발생했습니다.

구문 오류: 컴파일된 C 프로그램을 실행하는 동안 예기치 않은 "("가 발생했습니다.

C 바이너리를 실행하려고 합니다.qv셸의 프로그램(이 프로그램은 다음과 같이 다른 컴퓨터에서 컴파일됩니다.

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

문제가 무엇인지 판단하는 데 충분한 정보를 제공했지만 해결책은 아닙니다.

"Syntax error: "("unexpected"""라는 메시지는 분명히 쉘에서 나온 것입니다. 쉘이 바이너리를 실행하려고 하는 이유는 무엇입니까? 커널이 시도하고 포기하기 때문입니다. 이런 일이 발생하면 sudo는 A가 누락되었을 수 있다고 생각합니다.정확한 제목선택한 쉘을 호출하려고 시도합니다(sudo는 실행을 시도합니다 sh).

커널이 프로그램을 실행할 수 없는 이유는 무엇입니까? 실행 파일 형식이 지원되지 않기 때문입니다. 단순히 잘못된 아키텍처(예: 32비트 시스템에서 64비트 x86 바이너리를 실행하려고 시도하거나 그 반대로) 또는 잘못된 운영 체제(예: 32비트에서 FreeBSD 실행 파일을 실행하려고 시도)에 대해 컴파일했기 때문에 발생하는 것도 아닙니다. 시스템 파일) Linux): 커널은 파일을 실행 가능한 형식으로 인식하지 않습니다. 예를 들어, Linux에서 이 프로그램을 실행하려고 하면 현재 갖고 있는 프로그램이매우 낮은 주파수바이너리. 일반적인 운영 체제에서는 Linux에서 macOS 바이너리를 실행하려고 하면 이러한 상황이 발생하며 그 반대의 경우도 마찬가지입니다.

이 문제는 잘못된 권한이나 라이브러리 누락으로 인한 것이 아닙니다. 이들 중 하나라도 문제가 발생하면 커널은 다른 오류를 보고하고 sudo는 셸 실행을 시도하지 않습니다.

해결책은 올바른 운영 체제와 올바른 아키텍처에 맞게 프로그램을 컴파일하는 것입니다. 프로그램을 실행 중인 동일한 컴퓨터에서 컴파일할 수 없는 경우크로스 컴파일러. 프로그램을 다시 컴파일할 수 없는 경우 에뮬레이터에서 실행하는 방법이 있을 수 있지만 이는 일반적으로 다시 컴파일하는 것보다 훨씬 어렵고 느리므로 최후의 수단으로만 사용하십시오.

관련 정보