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