我正在使用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
有人能告诉我如何阅读这些错误并给我一些解决方案吗?
答案 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")
答案 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=native
和CXXFLAGS
中删除了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++ .