gcc Linux C++编译错误< emmintrin.h>

5kgi1eie  于 2023-01-05  发布在  Linux
关注(0)|答案(1)|浏览(585)

我尝试使用stb_image. h加载图像,但在gcc提供的版本中出现两个编译器错误<emmintrin.h>。我认为可能需要一个编译器选项,但我无法找到它。
错误代码:

/usr/lib/gcc/x86_64-pc-linux-gnu/11.1.0/include/emmintrin.h:1230:10: error: the last argument must be an 8-bit immediate
 1230 |   return (__m128i)__builtin_ia32_pslldqi128 (__A, __N * 8);
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/lib/gcc/x86_64-pc-linux-gnu/11.1.0/include/emmintrin.h:1224:10: error: the last argument must be an 8-bit immediate
 1224 |   return (__m128i)__builtin_ia32_psrldqi128 (__A, __N * 8);
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

相关代码来自<emmintrin.h>:

extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm_srli_si128 (__m128i __A, const int __N)
{
  return (__m128i)__builtin_ia32_psrldqi128 (__A, __N * 8);
}

extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm_slli_si128 (__m128i __A, const int __N)
{
  return (__m128i)__builtin_ia32_pslldqi128 (__A, __N * 8);
}

编辑:它与spdlog有关,我删除了spdlog的所有包含,并将我的日志宏更改为空,它编译成功
最小可重现示例:
main.cpp

#include "pch.h"
#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"

int main() {
    return 0;
}

pH值:

#include <spdlog/spdlog.h>

cmakelists.txt:

cmake_minimum_required(VERSION 3.22)
project(untitled2)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_COMPILER /usr/bin/g++)

add_executable(untitled2 main.cpp stb_image.h pch.h)
target_precompile_headers(untitled2 PUBLIC pch.h)

add_subdirectory(spdlog)
target_link_libraries(untitled2 spdlog)
ldfqzlk8

ldfqzlk81#

当您的程序没有使用优化进行编译,但是emmintrin.h选择了_mm_srli_si128_mm_slli_si128的优化版本时,就会发生这种情况,因为fmt(spdlog的依赖项)在这里定义了__OPTIMIZE__
有关详细信息,请访问https://github.com/nothings/stb/discussions/1432#discussioncomment-4595273。

相关问题