我正在尝试使用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;
}
pch.h:
#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)
emmintrin.h
(最好包括实现在内的完整的stb_image.h
)在<spdlog.h>
头文件之前被包含到你的CPP文件中。 - Soonts