4

我正在尝试为 Tegra TK1 编译 C++ 库。该库链接到 TBB,我使用包管理器提取了它。在编译期间我收到以下错误

/tmp/cc4iLbKz.s: Assembler messages:
/tmp/cc4iLbKz.s:9541: Error: thumb conditional instruction should be in IT block -- `strexeq r2,r3,[r4]'

谷歌搜索了一下,这个问题让我尝试添加-mimplicit-it=thumb到 CMAKE_CXX_FLAGS,但编译器无法识别它。

我正在使用内核 3.10.40-grinch-21.3.4 在 tegra 上编译,并使用 gcc 4.8.4 编译器(这就是我键入 c++ -v 时返回的内容)

我不确定最初的错误消息是什么意思,尽管我认为它与 TBB 链接库而不是我正在编译的源有关。修复的问题也很神秘。任何人都可以对此有所了解吗?

4

2 回答 2

6

-mimplicit-it汇编器的一个选项,而不是编译器的一个选项。因此,如果您的 makefile 中没有特定的汇编器标志(您可能没有,因为您似乎没有使用单独的汇编器步骤),您需要使用编译器-Wa选项来传递它通过,即-Wa,-mimplicit-it=thumb

问题的根源几乎可以肯定是一些内联汇编——如果你真的只是链接预建库——可能来自头文件中的静态内联——其中包含有条件执行的指令(我猜它类似于cmpxchg执行)。由于您的工具链可以很好地配置为编译为 Thumb 指令集 -这需要前面的it(If-Then) 指令来设置条件指令- 默认情况下,另一种选择可能是只编译(和/或在适当时-marm删除)-mthumb并通过根本不使用 Thumb 来回避这个问题。

于 2016-03-14T21:08:33.450 回答
-1

添加编译器选项:

-wa

应该解决问题。

于 2016-03-15T16:35:39.167 回答