Подтвердить что ты не робот

Компиляция кросс-платформенной С++

Я использую операционную систему Windows 7 - 32bit.

Я хочу скомпилировать свой простой исходный код на С++ в исполняемый файл для всех ОС и архитектур.

Я хочу скомпилировать для этих ниже операционных систем из своей ОС.

  • Windows 32
  • Windows 64
  • Linux 32
  • Linux 64
  • OSX 32
  • OSX 64

Возможно ли это или нет?

Примечание. Мне нужно скомпилировать С++ для всех ОС только с 32-разрядным Win7.

4b9b3361

Ответ 1

Гораздо проще скомпилировать его на целевой ОС, чем перекрестно компилировать его. Что вам нужно, это инструментальная цепочка для каждой ОС и инструмент "make". У CMake есть мощные возможности кросс-компиляции. Не обязательно, но сэкономить деньги: получите программное обеспечение для виртуализации (например, VMWare Player бесплатно) и запустите другую ОС.

Я бы порекомендовал clang (OSX), gcc (Linux), TDM gcc (Windows) как инструментальные цепочки (MSVC также хорош, но не является бесплатным). Разница между 32 бит и 64 бит не должна быть проблемой. Когда вы работаете с разными компиляторами, я советую придерживаться стандарта, поворачивая самые фандальные флаги компилятора на каждом из них.

Я также рекомендовал бы иметь сервер непрерывной интеграции где-нибудь с одним клиентом для каждой цели и архитектуры ОС. Это облегчило бы боль несовместимых изменений, которые вы делаете в одной ОС. И вы также сможете обеспечить установку менеджером пакетов или установщиком.

Просто выполните поиск в Интернете для дальнейших чтений о кросс-компиляции, инструментальных цепочках и непрерывной интеграции.

Ответ 2

Вам нужна система сборки, такая как автоматические инструменты или CMake, и я рекомендую последнюю. Существует утилита Python под названием cookiecutter, которая позволяет создать простой проект шаблона CMake/С++ с использованием Python (шаблон BoilerplatePP). В этой ссылке вы найдете инструкции по ее использованию для создания стартового проекта. Первоначальный проект должен выглядеть примерно так:

$ tree cpp/
cpp/
├── CMakeLists.txt
├── README.md
├── include
│   └── Calculator.hpp
├── src
│   ├── CMakeLists.txt
│   └── Calculator.cpp
├── test
│   ├── CMakeLists.txt
│   └── CalculatorTests.cpp
└── thirdparity
    └── catch
        └── include
            └── catch.hpp

CMake поддерживает кросс-компиляцию с версии 2.6. Прочтите эту статью, чтобы получить представление об этой проблеме. Удачи.

Ответ 3

Вы можете начать использовать CMake и подготовить проект к компиляторам во всех ОС.

В некоторых особых случаях вы должны адаптировать свой код, включая проверки препроцессоров, на которых вы используете ОС. Например:

#ifdef WIN32
//do some stuff for Windows
#elif __APPLE__
//do some stuff for Apple
#elif __linux__
//do stuff for Linux
#endif

Здесь, на этой ссылке, вы можете найти список всех предопределенных макросов.

Чтобы скомбинировать все, используя только ваш Win7 32bit, вы можете использовать кросс-компилятор GCC. Пока что GCC или CLANG являются единственными компиляторами, доступными в Windows, Mac и Linux. Следуйте этой вики, если вы хотите построить свой проект для других целей, а не только для Windows 32bit

GCC

Ответ 4

Я думаю, что короткий ответ - да, но потом у нас есть детали (дьявол всегда скрывается в деталях). Вкратце у нас есть два вопроса: совместимость источника и совместимость с инструментами.

  • Совместимость с инструментальными связями. Здесь мы должны рассмотреть 3 части: компилятор, библиотеки и инструменты сборки. К счастью, инструмент построения существует и даже не один. Это знаменитый make во всех реинкарнациях, cmake, ninja и т.д. Я предпочитаю cmake как самый легкий, но вы всегда можете выбрать свое оружие выбора. Компилятор. GCC - хороший выбор, но сегодня у нас есть CLang, который также является хорошим выбором. Я бы поставил для CLang как более интересное решение, которое чище и лучше поддерживается в Windows. Еще один хороший выбор - Intel С++/C, но он стоит. Другой способ - использовать разные компиляторы для разных систем, и это тоже неплохой выбор. Boost сделать это и повысить команду является одним из лучших. Вы можете копаться в форсированных конфигурациях и получать много интересных макросов и заголовков. Стандартную библиотеку С++ и другие библиотеки. Это одна из самых сложных вещей. С++ является несколько стандартным, но может иметь проблемы после обновления. Другие библиотеки должны быть построены с использованием компилятора для конкретной системы. Поэтому будьте готовы распространить свое программное обеспечение с помощью библиотечного пакета. Еще один хороший вариант - полагаться на сторонние кросс-платформенные библиотеки, такие как Qt или WxWidgets.

  • Совместимость источников тесно связана с конкретной реализацией подсистемы ОС. Например, потоки, разделяемая память, сокеты, сбор данных ввода-вывода, графический интерфейс. Обычно это не очень сложно, но требуется время, чтобы написать все эти обертки.

Ответ 5

cmake используется как метаязык, поскольку он абстрагирует все привязки инструментальной и ОС; конечно, это полезно, но может быть трудно использовать в первый раз...

Что вам действительно нужно, так это то, что cmake использует за сценой: 1. компилятор для каждой целевой ОС 2. хорошо написанный makefile

вы можете включить флаги для изменения поведения файла makefile или если вы действительно хотите, чтобы урезанная версия вы просто вызывали правильный компилятор (для желаемой ОС) при создании кода.

Ответ 6

Как уже было сказано CMake - лучшая кроссплатформенная инструментальная цепочка компиляции. Он генерирует решения Visual Studio, проекты Makefiles, Eclipse и т.д. Для всех платформ, упомянутых выше.

Вы также можете попробовать SCons, это немного менее известно, но немного проще

Ответ 7

Golang предлагает легкую кросс-компиляцию (укажите $GOOS и $GOARCH и запустите "go build" ); в зависимости от ваших требований (например, вам нужна жесткая RTOS), это может быть правильный инструмент для работы.

Ответ 8

Просто указывая на то, что с технической точки зрения, если у вас есть вопрос, что вы хотите скомпилировать один и тот же код в Windows 7, но нацеливаясь на эти другие ОС, то вам нужен кросс-компилятор для всех тех разных целей, которые будут работать в окнах, С этой целью я считаю, что лучше всего использовать Cygwin или MinGW32 и создавать кросс-компиляторы для ваших различных архитектур из источника GCC. GCC (и, возможно, clang) являются единственными компиляторами, которые являются a) бесплатными, и b) способными поддерживать все ваши цели. Построение кросс-компилятора непросто, но должно быть осуществимо. Некоторые ссылки:

Ответы, которые говорят "используйте CMake!" дают вам хорошие советы, поскольку они поощряют вас использовать систему сборки, которая может поддерживать построение исходного кода на всех этих системах, но если вы действительно можете строить только на Windows 7, то использование CMake не сделает вас хорошо.