-mimplicit-it 编译器标志无法识别

-mimplicit-it compiler flag not recognized

我正在尝试为 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]'

一些谷歌搜索和 this question 让我尝试将 -mimplicit-it=thumb 添加到 CMAKE_CXX_FLAGS,但编译器无法识别它。

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

我不确定最初的错误消息是什么意思,但我认为它与 TBB 链接库有关,而不是我正在编译的源代码。修复的问题也很神秘。任何人都可以阐明这一点吗?

-mimplicit-itan option to the assembler, not to the compiler. Thus, in the absence of specific assembler flags in your makefile (which you probably don't have, given that you don't appear to be using a separate assembler step), you'll need to use the -Wa option to the compiler通过,即-Wa,-mimplicit-it=thumb.

问题的根源几乎可以肯定是一些内联汇编——如果你真的只链接预构建的库,可能来自头文件中的静态内联——它包含有条件执行的指令(我要猜猜它类似于 cmpxchg 实现)。由于您的工具链可以很好地配置为编译为 Thumb 指令集 - which requires a preceding it (If-Then) instruction to set up conditional instructions - 默认情况下,另一种选择可能是仅使用 -marm 进行编译(and/or 删除 -mthumb 如果适当的)并通过完全不使用 Thumb 来回避问题。

添加编译器选项:

-wa

应该可以解决问题。