Кросс-компиляция программы hello world от VS2012 на Windows 7 до Windows XP

Я пытаюсь кросс-компилировать следующую программу hello-world

#include <iostream>

int main()
{
    std::cout << "Hello world!" << std::endl;
}

Моя хост-платформа использует Microsoft Visual Studio Express 2012 для Windows Desktop на 64-разрядной машине с Windows 7 с пакетом обновления 1 (SP1). Моя целевая платформа - это 32-разрядное устройство Windows XP Embedded (версия 2002 с пакетом обновления 2) с 248 МБ ОЗУ. Я следую инструкциям командной строки по адресу http://blogs.msdn.com/b/vcblog/archive/2012/10/08/10357555.aspx чтобы выполнить кросс-компиляцию.

Тот факт, что я могу успешно запустить свой hello_world.exe в виртуальной машине IE6 на XP с https://dev.windows.com/en-us/microsoft-edge/tools/vms/windows/ дает мне уверенность в том, что кросс-компиляция прошла нормально. Однако, когда я копирую hello_world.exe на мое устройство Windows XP Embedded и пытаюсь запустить его, я получаю следующую ошибку приложения:

введите описание изображения здесь

Зависимость Уокер (работает на устройстве со встроенным XP) не показывает мне никаких проблем с DLL:

введите описание изображения здесь введите описание изображения здесь

Я застрял здесь. Если кто-нибудь может пролить свет на то, почему я получаю эту странную ошибку приложения и как я могу ее исправить, я был бы рад услышать!

1 ответ

Задача решена. Проблема заключалась в том, что процессор встроенного устройства не поддерживал определенные инструкции. Я собирал hello_world программа без /arch вариант, но для Visual Studio 2012 это означает, что инструкции SSE2 включены. Компилирование моего hello_world программа с /arch:IA32 вариант решает проблему.