根据评论更新:
g++
OP 已在 Linux 系统上安装了 MacOS可执行文件。Linux 系统无法将其识别为可执行文件,因此尝试将其作为 shell 脚本执行,从而导致误导性错误消息。
该特定错误消息:
syntax error: ')' unexpected
看起来像一个 shell 错误,而不是编译器错误。
在我的系统上,具有无关的 C++ 程序)
导致 g++ 产生此消息:
c.cpp: In function ‘int main()’:
c.cpp:2:5: error: expected primary-expression before ‘)’ token
c.cpp:2:5: error: expected ‘;’ before ‘)’ token
请注意,消息包括行号和列号,就像 g++ 语法错误消息通常那样。
而带有无关的 Bourne shell 脚本)
会产生如下消息:
./foo.sh: 3: ./foo.sh: Syntax error: ")" unexpected
这与您所看到的非常相似,但并不完全相同。(差异很容易由不同的实现引起sh
。)
在某个地方,要么你有一个带有语法错误的 shell 脚本,要么你试图执行一个 shell 脚本以外的东西,就好像它是一个 shell 脚本一样。
您正在运行什么命令会产生此错误?是
/data/data/app/sdk/hardware/tools/avr/bin/avr-g++
一个适当的可执行文件?如果你跑步会发生什么
/data/data/app/sdk/hardware/tools/avr/bin/avr-g++ --version
从命令行?关于什么
file /data/data/app/sdk/hardware/tools/avr/bin/avr-g++ ?
从评论中,这个命令:
/data/data/app/sdk/hardware/tools/avr/bin/avr-g++ --version
产生相同的错误消息:
syntax error: ')' unexpected).
这意味着该avr-g++
命令是可执行的,但系统无法将其识别为可执行文件,因此它试图将其作为 shell 脚本运行。
你在什么操作系统上运行这个?该avr-g++
命令是打算在主机系统上运行还是在目标上运行(g++
在 Arduino 上运行似乎不太可能)。比较输出
file /data/data/app/sdk/hardware/tools/avr/bin/avr-g++
例如,
file /usr/bin/g++
或者,如果它是符号链接,则指向它指向的任何实际文件(/usr/bin/g++-4.7
在我的系统上)。关键是要确定这是什么类型的文件avr-g++
,并将其与已知对您的系统正确的可执行文件进行比较。(只是为了 100% 确定,请尝试/usr/bin/g++ --version
。)
例如,在我的系统上,我得到:
$ file /usr/bin/g++
/usr/bin/g++: symbolic link to `g++-4.7'
$ file /usr/bin/g++-4.7
/usr/bin/g++-4.7: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xac398e1061dbb1a6f8da022f0a1616f15cf07085, stripped