ICC 抱怨缺少 __builtin_ia32_ldmxcsr

ICC complains about missing __builtin_ia32_ldmxcsr

在 Linux 上使用 Intel Composer 15 Update 3 编译项目时,我在链接时得到以下未解析的符号:

undefined reference to `__builtin_ia32_ldmxcsr'
undefined reference to `__builtin_ia32_stmxcsr'

通过 Google 搜索,我发现这些函数内置于 32 位版本的 g++ 中,这就是英特尔无法找到它们的原因。首先,我正在使用 64 位编译器在 64 位 OS 上进行编译;为什么链接器要查找仅在 32 位中找到的函数?其次,为什么Intel生成的目标代码要找一个g++内置函数?

Firstly, I am compiling on a 64-bit OS with a 64-bit compiler; why is the linker looking for a function found only in 32-bit?

可能是因为您的某些源代码不恰当地引用了它们。

第一步:找出哪些对象引用了这些内置函数:

nm -A *.o *.a | egrep '__builtin_ia32_ldmxcsr|__builtin_ia32_stmxcsr'

第二步:预处理相应的源以找出引用的来源:

icpc -E -I ... bad_source.cpp