使用Assembler消息编译错误

时间:2013-06-15 18:20:24

标签: c++ assembly point-cloud-library

我正在使用Point Cloud Library。它主要是在C ++中编译时,会出现这样的错误:

[  0%] Building CXX object common/CMakeFiles/pcl_common.dir/src/intersections.cpp.o
In file included from /home/lv/pcl-trunk/common/include/pcl/point_types.h:301:0,
                 from /home/lv/pcl-trunk/common/include/pcl/common/impl/common.hpp:41,
                 from /home/lv/pcl-trunk/common/include/pcl/common/common.h:186,
                 from /home/lv/pcl-trunk/common/include/pcl/common/intersections.h:41,
                 from /home/lv/pcl-trunk/common/src/intersections.cpp:38:
/home/lv/pcl-trunk/common/include/pcl/impl/point_types.hpp:1009:68: warning: ‘SHOT’ is deprecated [-Wdeprecated-declarations]
/tmp/ccRLy4Re.s: Assembler messages:
/tmp/ccRLy4Re.s:2488: Error: no such instruction: `vfmadd312ss (%r9),%xmm2,%xmm1'
/tmp/ccRLy4Re.s:2638: Error: no such instruction: `vfmadd312ss (%rdx),%xmm2,%xmm1'
/tmp/ccRLy4Re.s:3039: Error: no such instruction: `vfmadd312ss (%rax,%r11,4),%xmm5,%xmm1'
/tmp/ccRLy4Re.s:3402: Error: no such instruction: `vfmadd312ss (%rax,%r11,4),%xmm5,%xmm1'
/tmp/ccRLy4Re.s:3534: Error: no such instruction: `vfmadd312ss (%rax,%rdx,4),%xmm1,%xmm2'
/tmp/ccRLy4Re.s:3628: Error: no such instruction: `vfmadd312ss (%rax,%rdx,4),%xmm1,%xmm2'
/tmp/ccRLy4Re.s:6103: Error: no such instruction: `vfmadd312ss (%r11),%xmm0,%xmm4'
/tmp/ccRLy4Re.s:6121: Error: no such instruction: `vfmadd312ss (%r11,%rbx,4),%xmm0,%xmm3'
/tmp/ccRLy4Re.s:6131: Error: no such instruction: `vfmadd312ss (%r11,%rbp,4),%xmm0,%xmm2'
/tmp/ccRLy4Re.s:6135: Error: no such instruction: `vfmadd312ss (%r11,%r13,4),%xmm0,%xmm1'
/tmp/ccRLy4Re.s:6344: Error: no such instruction: `vfmadd312ss (%r10),%xmm0,%xmm1'
/tmp/ccRLy4Re.s:11760: Error: no such instruction: `vfnmadd312ss (%rdx),%xmm0,%xmm0'
/tmp/ccRLy4Re.s:13976: Error: no such instruction: `vfmadd312ss (%rdi),%xmm0,%xmm1'
/tmp/ccRLy4Re.s:14125: Error: no such instruction: `vfmadd312ss (%rdx),%xmm0,%xmm1'
make[2]: *** [common/CMakeFiles/pcl_common.dir/src/intersections.cpp.o] Error 1
make[1]: *** [common/CMakeFiles/pcl_common.dir/all] Error 2
make: *** [all] Error 2

有人能告诉我如何阅读这些错误并给我一些解决方案吗?

7 个答案:

答案 0 :(得分:5)

您可以使用以下命令查看您的CPU(编译器): gcc -march=native -Q --help=target | grep march

然后你可以在ccmake CMAKE_CXX_FLAGS选项中添加你的cpu类型,对我来说: CMAKE_CXX_FLAGS = -march=corei7-avx

答案 1 :(得分:3)

您可以添加-march=native -mno-avx这对我有用。

在我的CMakeLists.txt中,我将上述内容添加到CMAKE_CXX_FLAGS

SET(CMAKE_CXX_FLAGS "-ggdb -O3 -fPIC -std=c++0x -march=native -mno-avx")

[Source can be found in this page.]

答案 2 :(得分:1)

我在尝试安装glove时遇到了这个问题。

我遇到的问题是通过升级我的ubuntu 14.04机器上安装的g ++版本来解决的。

我原来的g ++版本是4.6.4,我把它升级到g ++ - 5(当我升级它时为5.4.1)。

答案 3 :(得分:1)

汇编程序有错误消息,这意味着汇编程序不知道这些汇编代码,例如vfmadd312ss

当编译器生成一些仅CPU汇编代码时会发生这种情况,例如intel E5 with arch core-avx2有额外的指令集advanced vector extensions,但是如果" as"是知道新CPU的工具,这个错误会发生。

尝试新版Binutils,最新版本为2.29

如果您从其他工具编译代码,例如bazel,请确保它将调用新的" as"。

答案 4 :(得分:0)

我遇到了相同的错误消息, 我从我的Makefile中的-march=nativeCXXFLAGS中删除了CFLAGS , 在我的情况下有效。但是由于您没有放出makefile,所以我不确定这是否可以解决您的问题,您可以尝试一下。

答案 5 :(得分:-1)

您可能需要在编译时启用高级向量扩展(并使用支持此功能的工具链)。尝试-march = core-avx2或类似的东西。

如果您自己编译库,则可能需要将其配置为不使用AVX。

答案 6 :(得分:-1)

您是否尝试过使用其他编译器?

我在使用Point Cloud Library的项目中遇到了汇编程序错误。这可能是由于在核心i7处理器上使用Ubuntu 12.04(参见https://github.com/uzh-rpg/rpg_svo/issues/7)。

我能够通过安装'clang'编译器来编译

sudo apt-get install clang

然后运行cmake:

cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ .