構文エラー:コンパイルされた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は実行を試みますsh)。

カーネルがプログラムを実行できないのはなぜですか?実行可能ファイル形式がサポートされていないためです。これは、間違ったアーキテクチャ(32ビットシステムで64ビットx86バイナリを実行しようとするか、その逆)または無効なオペレーティングシステム(32ビットでFreeBSD実行可能ファイルを実行しようとするなど)をコンパイルしたために発生するわけではありません。システムファイル)Linux):カーネルはファイルを実行可能な形式として認識しません。たとえば、Linuxでこのプログラムを実行しようとすると、現在持っているプログラムが非常に低い周波数バイナリ。一般的なオペレーティングシステムでは、LinuxでmacOSバイナリを実行しようとするとこのような状況が発生し、その逆も同様です。

この問題は、不正な権限やライブラリの欠落によるものではありません。これらのいずれかで問題が発生した場合、カーネルは他のエラーを報告し、sudoはシェルの実行を試みません。

解決策は、正しいオペレーティングシステムと正しいアーキテクチャに合わせてプログラムをコンパイルすることです。プログラムを実行しているのと同じコンピュータでコンパイルできない場合クロスコンパイラ。プログラムを再コンパイルできない場合は、エミュレータで実行する方法があるかもしれませんが、これは通常再コンパイルよりはるかに困難で遅いので、最後の手段としてのみ使用してください。

おすすめ記事