4

我正在使用点云库。它主要是在 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

谁能告诉我如何阅读这些错误并给我一些解决建议?

4

7 回答 7

5

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

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

于 2014-05-12T08:55:55.710 回答
4

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

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

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

[来源可以在此页面中找到。]

于 2014-10-20T22:56:59.117 回答
2

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

通过升级安装在我的 ubuntu 14.04 机器上的 g++ 版本解决了我面临的问题。

我最初的 g++ 版本是 4.6.4,我将其升级到 g++-5(升级时为 5.4.1)。

于 2017-04-17T03:13:19.090 回答
2

有来自汇编器的错误信息,这意味着汇编器不知道这些汇编代码,例如vfmadd312ss.

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

尝试新版本的 Binutils,2.29现在是最新版本。

例如,如果您从另一个工具编译代码,bazel请确保它将调用新的“as”。

于 2017-11-23T03:42:08.343 回答
0

您是否尝试过使用不同的编译器?

我在使用点云库的项目中遇到了汇编错误。这可能是由于在核心 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++ .
于 2015-01-08T10:32:20.653 回答
0

我遇到了相同的错误消息, 我删除了-march=nativefromCXXFLAGSCFLAGS我的 makefile,它适用于我的情况。但是由于您没有发布您的makefile,我不确定这是否适用于您的情况,您可以尝试任何方式。

于 2019-03-25T09:46:35.560 回答
-1

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

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

于 2013-06-15T18:31:49.550 回答