调用always_inline’_mm_mullo_epi32’时内联失败:目标特定选项不匹配

我正在尝试使用使用SIMD内在函数的cmake编译C程序。 当我尝试编译它时,我得到两个错误

/ usr / lib / gcc / x86_64-linux-gnu / 5 / include / smmintrin.h :326:1:错误:内联调用always_inline’_mm_mullo_epi32’失败:目标特定选项不匹配_mm_mullo_epi32(__ m128i __X,__ m128i __Y)

/ usr / lib / gcc / x86_64-linux-gnu / 5 / include / tmmintrin.h :136:1:错误:内联调用always_inline’_mm_shuffle_epi8’失败:目标特定选项不匹配_mm_shuffle_epi8(__ m128i __X,__ m128i __Y)

这个问题已经通过设置在这里解决了StackOverflow

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.1") 

我尝试了相同的和许多其他选项。 但我的项目仍然无法编译。

 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.1") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -sse4_1") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=nehalem") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.1 -msse4.2") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ssse3") 

由于您正在编译C代码而不是C ++,因此您需要:

 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.1") 

你可以摆脱所有其他-march XXX-msseXXX设置。

如果您使用的是C和C ++混合,那么您还可以添加:

 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.1")