我正在尝试为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,但编译器没有识别它。
我正在使用kernal 3.10.40-grinch-21.3.4编译tegra,并使用gcc 4.8.4编译器(这就是当我输入c ++ -v时返回的内容)
我不确定初始错误消息的含义,但我认为它与TBB链接库有关,而不是我编译的源代码。修复的问题也很神秘。任何人都可以对此有所了解吗?
答案 0 :(得分:4)
-mimplicit-it
是an option to the assembler,而不是编译器。因此,如果您的makefile中没有特定的汇编程序标志(您可能没有,因为您似乎没有使用单独的汇编程序步骤),您需要使用{ {3}}传递它,即-Wa,-mimplicit-it=thumb
。
问题的根源几乎可以肯定是一些内联汇编 - 如果您真的只链接预先构建的库 - 可能来自头文件中的静态内联 - 它包含有条件执行的指令(I' m猜测它是cmpxchg
实现的东西。由于您的工具链可以配置为编译到Thumb指令集 - the -Wa
option to the compiler - 默认情况下,另一种替代方法可能是使用-marm
编译(和/或删除-mthumb
,如果合适)并且根本不使用Thumb来回避这个问题。
答案 1 :(得分:-1)
添加编译器选项:
<强> -Wa 强>
应该解决问题。