У меня есть очень простое приложение, которое анализирует некоторые текстовые файлы и вставляет записи в базу данных SQL Server.
«Это работает для меня», но происходит сбой в следующей строке при запуске на другой машине:
cmr->dateTimeStamp = TIMESTAMP_STRUCT { };
Для меня это означает, что отсутствует какая-либо зависимость, связанная с TIMESTAMP_STRUCT, потому что это единственная вещь в этой строке, которая раньше не появлялась в программе.
TIMESTAMP_STRUCT и SQLUSMALLINT определены в sqltypes.h, и в любом случае они просто typedefs, поэтому я не ожидаю, что там будут какие-то зависимости.
Я установил собственный клиент SQL Server 11 и среду выполнения Visual C ++ на целевой машине.
Что еще я мог упустить?
Visual Studio 2015, и целевой машиной является Windows Server 2008 R2.
Я использую один и тот же входной файл на обеих машинах, но он не работает только на одной машине.
Проблема сводилась к флагу компилятора.
Этот проект начался как игрушечное приложение для чего-то совершенно не связанного с инструкциями AVX. Флаг, нацеленный на этот набор инструкций, никогда не сбрасывался, когда он становился «настоящим» приложением.
Снятие этого флага компилятора (/ arch: AVX) заставляет программу работать на обеих машинах.
Что для меня странно, так это то, что в этой программе нет инструкций AVX, так почему же установленный флаг может вызвать разницу в выполнении между двумя машинами, особенно для чего-то столь же безобидного, как инициализация структуры, состоящей из примитивных типов?
Других решений пока нет …