You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用vcpkg安装PCL后导入头文件出现__builtin_ia32_foo未声明编译错误

PCL导入时触发Eigen指令集相关编译错误的解决方法

本人主要熟悉Python,对C++及编译知识陌生。按PCL官方推荐用vcpkg执行vcpkg install pcl:x64-windows安装PCL后,只要导入任意PCL库,就会出现大量__builtin_ia32前缀相关编译错误,疑似源于PCL依赖的Eigen库。此前未导入PCL的代码可正常编译。

编译错误示例

====================[ Build | FallingRockDetectionPC | Debug ]==================
"C:\Program Files\JetBrains\CLion 2022.3\bin\cmake\win\bin\cmake.exe" --build C:\...\Projects\FallingRockDetectionPC\cmake-build-debug --target FallingRockDetectionPC -j 16
[1/3] Building CXX object CMakeFiles/FallingRockDetectionPC.dir/main.cpp.obj
FAILED: CMakeFiles/FallingRockDetectionPC.dir/main.cpp.obj 
C:\PROGRA~1\JETBRA~1\CLION2~1.3\bin\mingw\bin\G__~1.EXE -DDISABLE_PNG -D__SSE2__ -D__SSE3__ -D__SSE4_1__ -D__SSE4_2__ -D__SSE__ -D__SSSE3__ -isystem C:/.../Programs/vcpkg/installed/x64-windows/include -isystem C:/.../Programs/vcpkg/installed/x64-windows/include/eigen3 -g -fdiagnostics-color=always -MD -MT CMakeFiles/FallingRockDetectionPC.dir/main.cpp.obj -MF CMakeFiles\FallingRockDetectionPC.dir\main.cpp.obj.d -o CMakeFiles/FallingRockDetectionPC.dir/main.cpp.obj -c C:/.../Projects/FallingRockDetectionPC/main.cpp

In file included from C:/Users/samue/Programs/vcpkg/installed/x64-windows/include/Eigen/src/Core/util/ConfigureVectorization.h:349,
                 from .../vcpkg/installed/x64-windows/include/Eigen/Core:22,
                 from .../vcpkg/installed/x64-windows/include/pcl/memory.h:48,
                 from .../vcpkg/installed/x64-windows/include/pcl/io/pcd_io.h:42,
                 .
                 .
                 .
...\mingw64\lib\gcc\x86_64-w64-mingw32\12.2.0\include\pmmintrin.h: In function '__m128 _mm_addsub_ps(__m128, __m128)':
...\mingw64\lib\gcc\x86_64-w64-mingw32\12.2.0\include\pmmintrin.h:53:19: error: '__builtin_ia32_addsubps' was not declared in this scope; did you mean '__builtin_ia32_subps'?
   53 |   return (__m128) __builtin_ia32_addsubps ((__v4sf)__X, (__v4sf)__Y);
      |                   ^~~~~~~~~~~~~~~~~~~~~~~
      |                   __builtin_ia32_subps

已尝试的解决步骤

  • 使用x64版本CMake重新编译vcpkg中的PCL
  • 将CLion自带MinGW替换为外部最新版本
  • 彻底删除vcpkg及相关文件夹后重新安装PCL(此前误装x86版本包)

项目CMakeLists.txt内容

cmake_minimum_required(VERSION 3.24)
project(FallingRockDetectionPC)

find_package(PCL CONFIG REQUIRED)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})

set(CMAKE_CXX_STANDARD 17)

add_executable(FallingRockDetectionPC main.cpp load_sequential_pc.cpp load_sequential_pc.h)
target_link_libraries(FallingRockDetectionPC PRIVATE ${PCL_LIBRARIES})

可行解决方案

错误根源是PCL通过${PCL_DEFINITIONS}传递了强制启用SSE指令集的宏,但MinGW在部分环境下无法正确识别这些指令集内置函数。可按以下步骤修复:

1. 移除自动添加的指令集宏

在CMakeLists.txt中删除add_definitions(${PCL_DEFINITIONS}),避免强制开启不兼容的指令集优化。

2. 手动指定兼容的编译选项

如果需要保留基础优化,可手动添加大部分CPU都支持的SSE2指令集:

# 替换原add_definitions(${PCL_DEFINITIONS})
target_compile_options(FallingRockDetectionPC PRIVATE -msse2)

3. 确保工具链一致性

使用MinGW专属的vcpkg triplet重新安装PCL,保证编译工具链统一:

set VCPKG_TARGET_TRIPLET=x64-windows-mingw
vcpkg install pcl:x64-windows-mingw

然后在CLion的CMake配置中指定vcpkg工具链文件:

set(CMAKE_TOOLCHAIN_FILE "C:/.../Programs/vcpkg/scripts/buildsystems/vcpkg.cmake" CACHE STRING "Vcpkg toolchain file")

4. 兜底方案:禁用Eigen向量优化

如果以上方法无效,可强制Eigen不使用SIMD优化:

add_definitions(-DEIGEN_DONT_VECTORIZE)

内容的提问来源于stack exchange,提问作者scrams

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 17:15:37