Я работаю над Ubuntu и пишу обычную программу c++.
$ gcc test.cpp
Я хочу распространять свою программу в качестве приложения. Когда я дважды нажимаю на файл a.out file.it на своем ПК, но не работаю на другом (Linux) ПК.
Мой вопрос:
GCC требует, чтобы клиентский ПК выполнял заявку?
как я могу создать исполняемый файл для всей платформы (Win, Linux, OS x)?
Вы пытаетесь скомпилировать файл Windows PE в среде Linux?
Если это так, вам понадобится цепочка инструментов mingW
См. Здесь http://sourceforge.net/projects/mingw-w64/ (Но поскольку проект mingw-w64 на sourceforge.net переместился на mingw-w64.org, я также предлагаю проверить mingw-w64.org)
Ответьте на # 1. Нет. Но целевой платформе нужны те же (или совместимые) динамические библиотеки, которые ожидают приложения. Если есть сомнения, скомпилируйте его со статической ссылкой. Это может помочь вам запустить тот же код на разных дистрибутивах Linux.
gcc -static -o your_exe_file test.cpp
Ответьте на # 2. Несколько вариантов:
Напишите переносимый код и скомпилируйте его с помощью компилятора C для каждой платформы, на которую вы хотите развернуть. Вы получите три исполняемых файла: один для Linux, другой для Windows и еще один для OS X.
Отпустите исходный код и позвольте пользователю делать компиляцию.
Используйте язык, такой как Java, Python, С# или любой другой, который не требует перекомпиляции для работы на нескольких платформах.
Время автономной работы Windows
и Linux
отличается. Вам нужно будет перекомпилировать свой код в целевой архитектуре. Если вы скомпилировали свой код в одном дистрибутиве Linux, есть вероятность, что вы сможете запустить его на другом, учитывая, что нет конфликтов библиотек и что архитектура такая же. Вы можете использовать флаг -static
чтобы избежать возможных проблем с разделяемыми библиотеками. Вам нужна компиляция cross-compiler toolchain
если вам нужно скомпилировать свой код на одной машине, нацеленной на другую машину. Чтобы дать небольшой пример, если вы хотите, чтобы ваш код запускался во встроенной системе, вам нужно будет переносить функции, специфичные для ОС, используя что-то вроде newlib. Поскольку дистрибутивы Linux
используют одно и то же ядро, это не проблема. Очевидно, что Windows
и Linux
совершенно разные.
Дополнительное примечание:
Используйте g++ для компиляции источников C++ (gcc для простой C и не включает стандартную библиотеку C++).
Если вы хотите использовать gcc (сильно обескуражен), тогда свяжите исходный файл со стандартной библиотекой C++.
gcc source.cpp -lstdc++
g++
.