После сборки на VS 2012 выясняется, что приложение попросту отказывается запускаться на Windows XP, хотя и нет ничего специфичного. Беда...
Что нужно сделать чтоб это исправить:
1. Обновляем Visual Studio до ServicePack 1 или новее (на момент написания актуален SP4). Без сервиспака, увы, ничего не выйдет. Эх, microsoft, microsoft...
2. В свойствах проекта на вкладке Configuration - Properties - параметр Platform Toolset выбираем пункт Visual Studio 2012 - Windows XP (v110_xp)
3. Обычно этого бывает достаточно. Но не всегда. В Windows XP нет функции GetTickCount64 в KERNEL32.DLL, а многие либы и программы ее используют (на удивление, даже если вы ей не пользовались - с большой вероятностью зависимость к ней будет). Чтобы избежать ее использования, нужно в свойствах проекта во вкладке C++ - Preprocessor - параметр Preprocessor Definitions добавить:
WINVER=0x0501;_WIN32_WINNT=0x0501
4. Если ваш софт использует функции PS API, то надо еще добавить в директивы препроцессора:
PSAPI_VERSION=1
Иначе работать не будет даже под вистой - только семерки и восьмерки.
После этого совместимость с WinXP будет достигнута
P.S. Если собираете boost на VS 2012 - он будет использовать GetTickCount64. Чтобы исправить, в параметры вызова сборщика bjam.exe добавить те же дефайны: define=WINVER=0x0501 define=_WIN32_WINNT=0x0501 define=NTDDI_VERSION=0x05010000 define=PSAPI_VERSION=1
Что нужно сделать чтоб это исправить:
1. Обновляем Visual Studio до ServicePack 1 или новее (на момент написания актуален SP4). Без сервиспака, увы, ничего не выйдет. Эх, microsoft, microsoft...
2. В свойствах проекта на вкладке Configuration - Properties - параметр Platform Toolset выбираем пункт Visual Studio 2012 - Windows XP (v110_xp)
3. Обычно этого бывает достаточно. Но не всегда. В Windows XP нет функции GetTickCount64 в KERNEL32.DLL, а многие либы и программы ее используют (на удивление, даже если вы ей не пользовались - с большой вероятностью зависимость к ней будет). Чтобы избежать ее использования, нужно в свойствах проекта во вкладке C++ - Preprocessor - параметр Preprocessor Definitions добавить:
WINVER=0x0501;_WIN32_WINNT=0x0501
4. Если ваш софт использует функции PS API, то надо еще добавить в директивы препроцессора:
PSAPI_VERSION=1
Иначе работать не будет даже под вистой - только семерки и восьмерки.
После этого совместимость с WinXP будет достигнута
P.S. Если собираете boost на VS 2012 - он будет использовать GetTickCount64. Чтобы исправить, в параметры вызова сборщика bjam.exe добавить те же дефайны: define=WINVER=0x0501 define=_WIN32_WINNT=0x0501 define=NTDDI_VERSION=0x05010000 define=PSAPI_VERSION=1
Читать дальше...