Я нахожусь в процессе обновления проекта Visual Studio 2010, предназначенного для RTOS INtime. Код, который выполняет операции приведения, не может связать. При исследовании выходных файлов «встроенной сборки» выясняется, что для некоторых операций приведения целых чисел VS2013 генерирует инструкции сборки для вызова __dtol3, __dtoui3, __dtoul3, __ltod3 и __ultod3. Проблема в том, что библиотеки INtime не содержат определений для этих функций. Я проверил, что VS2013 делает то же самое для целей Win32 для сборок Debug и Release.
Есть ли способ заставить VS2013 прекратить генерировать вызовы этих функций?
Вам нужно будет отключить кодер SSE2, используя / арка вариант (используйте / arch: IA32 или / arch: SSE).
В качестве альтернативы … (что следует официально не поддерживается; ваш пробег может отличаться; делай это на свой страх и риск)
Извлеките из msvcrt.lib объект, который определяет эти функции, и свяжите этот объект непосредственно с вашей программой. Эти функции определены в объекте с именем ftol3.obj; Вы можете извлечь его, используя Lib инструмент:
=>lib /nologo /list msvcrt.lib | findstr ftol3
f:\binaries\Intermediate\vctools\crt_bld\SELF_X86\crt\prebuild\INTEL\dll_lib\ftol3.obj
=>lib /nologo /extract:f:\binaries\Intermediate\vctools\crt_bld\SELF_X86\crt\prebuild\INTEL\dll_lib\ftol3.obj msvcrt.lib
Вам могут понадобиться дополнительные объекты, в зависимости от того (а) какие функции вы используете и (б) что именно определяют библиотеки INtime. Опять же, это не поддерживаемый способ использования библиотек времени выполнения Visual C ++, и он может работать или не работать в вашем конкретном случае использования.
возможно, другой путь:
добавить опцию компиляции
/d2noftol3
эта опция незадокументированный