ICC жалуется на отсутствие __builtin_ia32_ldmxcsr

При компиляции проекта с помощью Intel Composer 15 Update 3 для Linux я получаю следующие неразрешенные символы при связывании:

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

После поиска в Google я обнаружил, что эти функции встроены в 32-разрядную версию g++, поэтому Intel не может их найти. Во-первых, я компилирую на 64-битной ОС с 64-битным компилятором; почему компоновщик ищет функцию, найденную только в 32-битной версии? Во-вторых, почему объектный код, сгенерированный Intel, ищет встроенную функцию g++?

1 ответ

Решение

Во-первых, я компилирую на 64-битной ОС с 64-битным компилятором; почему компоновщик ищет функцию, найденную только в 32-битной версии?

Вероятно, потому что некоторые из вашего исходного кода неуместно ссылаются на них.

Первый шаг: выяснить, какие объекты ссылаются на эти встроенные функции:

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

Второй шаг: предварительно обработать соответствующий источник, чтобы выяснить, откуда поступают ссылки:

icpc -E -I ... bad_source.cpp
Другие вопросы по тегам