问题简而言之 - 在linux中,每当我们收到以下错误 "语法错误:word unexpected(expecting")")"时,它通常意味着什么?
问题详情 - 我一直在尝试按照Ubuntu 10.04上的Sourcery工具链交叉编译Qt-4.6.我按照编译Qt-4.6的链接中提到的确切步骤进行操作 .但是我在./configure步骤中得到以下错误 -
/home/weds/qt-everywhere-opensource-src-4.6.1/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
Run Code Online (Sandbox Code Playgroud)
在互联网上搜索我发现很多关于此错误的帖子.阅读所有这些内容.但仍然无法知道这个错误是什么以及如何解决它.如果有人帮我理解这个错误,我会很高兴.
PS 1 - Sourcery工具链存在于/ opt /文件夹中,我的PATH变量正确指向它. PS 2 - 此工具链未由我手动安装.相反,它是由供应商提供的.tgz文件,我在/ opt /文件夹中提取.
Ste*_*las 10
这是Almquist shell或其任何衍生物报告的错误dash(并且dash恰好是/bin/shUbuntu 10.04上的默认实现),当解析脚本的语法时发现了一个单词),例如在此期间案例陈述:
$ dash -c 'case a in b c) :; esac'
dash: 1: Syntax error: word unexpected (expecting ")")
Run Code Online (Sandbox Code Playgroud)
那是因为之后b,唯一预料到的是),(虽然实际上|也是允许的)所以这个c词是出乎意料的.
$ dash -c 'myfunc( something'
dash: 1: Syntax error: word unexpected (expecting ")")
Run Code Online (Sandbox Code Playgroud)
可能发生这种情况的一种情况是,脚本是通过Microsoft OS写入或传输的,其中文本行结尾是CRLF而不是LF.
一个
case a in b) cmd1;;
c) cmd2
esac
Run Code Online (Sandbox Code Playgroud)
在MS-DOS上编写的脚本将显示为:
case a in b) cmd1;;<CR>
c) cmd2<CR>
esac<CR>
Run Code Online (Sandbox Code Playgroud)
在Unix上,这c将是一个额外的单词后面的<CR>单词.
在这里,这不太可能,因为您的错误报告问题出现在脚本的第一行,并且大多数脚本都以#! /path/to/interpretershe-bang行开头.
另一种可能性是,你要运行脚本已经写在该设想sh是bash和使用了无法移植到其他结构sh实现.
由于您使用的是过时且不再维护的操作系统,因此您可能遇到该版本的错误dash.你可以运行dpkg-reconfigure dash,并告诉该系统不使用dash的sh(但bash不是),看看是否有帮助.
再也不可能在第一线.
听起来更有可能的是,该qmake文件不是脚本,而是系统无法识别的二进制可执行文件,例如因为它是错误体系结构的二进制格式,或者在传输过程中已损坏.
在这种情况下,当系统无法将其识别为本机可执行文件时,调用应用程序将尝试sh在其上运行,就好像它是一个shell脚本一样,并且(文件中存在字符可能会导致dash失败并出现此类错误.
在我的系统上:
$ dash /bin/touch
/bin/touch: 1: /bin/touch: Syntax error: word unexpected (expecting ")")
Run Code Online (Sandbox Code Playgroud)
如果你看一下/bin/touch脚本的内容,你会看到:
^?ELF^B^A^A^@^@^@^@^@^@^@^@^@^B^@>^@^A^@^@^@5&@^@^@^@^@^@@^@^@^@^@^@^@^@(ô^@^@...
Run Code Online (Sandbox Code Playgroud)
对此的答案似乎已发布在您链接的说明中。
诚然,它在评论中的位置很靠后,但搜索起来并没有花很长时间qmake: Syntax error: word unexpected。
引用:
Tej 说: 2013 年 1 月 4 日中午 12:20
好的,我已经解决了问题。非常不幸的是,人们没有说出到底是什么问题。问题是我们必须使用 Host qmake。对于我们在 tslib 安装期间按步骤执行的导出(导出 PATH=/usr/local/arm/4.3.2/bin:$PATH 等),我们必须撤消所有这些。就是这样。
希望能帮助别人
如果不清楚,Tej建议您似乎正在尝试qmake在主机系统上运行交叉编译。
| 归档时间: |
|
| 查看次数: |
45692 次 |
| 最近记录: |