Ruby 1.9.1 не удается построить с помощью Visual Studio 2012 (update1 и 2) из-за неразрешенных внешних элементов при создании с использованием флаг-компилятора -arch: SSE по умолчанию.Visual Studio 2012 создает нерешенные внешние элементы для xmm
cl -nologo -LD main.obj dmyext.obj msvcr110-ruby191-static.lib msvcr110-ruby191.res unicows.lib oldnames.lib user32.lib advapi32.lib shell32.lib ws2_32.lib -Femsvcr110-ruby191.dll -link -incremental:no -debug -opt:ref -opt:icf -implib:dummy.lib -def:msvcr110-ruby191.def -MAP:map-out.txt
Creating library dummy.lib and object dummy.exp
dummy.exp : error LNK2001: unresolved external symbol [email protected]
dummy.exp : error LNK2001: unresolved external symbol [email protected]
msvcr110-ruby191.dll : fatal error LNK1120: 2 unresolved externals
Открытие файла определения модуля, следующие элементы данных регистра появляются в разделе экспорта:
[email protected] DATA
[email protected] DATA
[email protected] DATA
[email protected] DATA
Первые две статьи, пронумерованные с двумя символами подчеркивания не вызывают проблемы, но последние два пункта которому предшествует один знак подчеркивания, отвечают за нерешенные внешние. Вручную модифицировать файл def, чтобы все они имели два подчеркивания, похоже, устраняют проблему, но я не уверен, что это просто скрывает проблему или устраняет проблему.
Другой вариант заключается в создании флагов-компоновщика -force: нерешен, но это опасно, если на самом деле требуются нерешенные внешние.
Третий вариант исправить это заключается в компиляции с параметром -arch: IA32, который не будет создавать инструкции SSE. Однако эта рубиновая dll также построена для платформы x64, и, похоже, нет возможности успешно построить x64 с использованием альтернативной опции -arch.
Мои вопросы:
Является ли это нормальным/Ожидается, что данные XMM регистров появляются как экспорт в файле определения модуля?
Есть ли какие-либо идеи относительно того, как разрешить это для платформ Win32 и x64?