2011-12-16 3 views
1

Являются ли компиляторы gcc и g ++ установленными на машине MAC OS X, отличной от тех, что есть в компиляторах GNU gcc и g ++ Ubuntu (Linux)?GNU gcc и g ++

Я использую Eclipse для разработки программы на C++, и есть секция toolchain, где говорится о MacOSX GCC, и мне было интересно, нужно ли мне устанавливать другой компилятор, чтобы исполняемый файл также работал на машинах Linux.

Я немного новичок в технических деталях разработки на С ++, поэтому я сожалею, если этот вопрос не имеет смысла.

+5

Даже если ваша версия gcc такая же, как Ubuntu, программа, которую он выводит, отличается. Во-первых, программы Linux используют исполняемый формат ELF, у macs нет (я не помню, что они используют, вам должен сказать Google Search). То, что вы описываете, называется перекрестной компиляцией, и даже тогда один бинарный файл редко работает на обеих платформах (вам нужно будет скомпилировать отдельную программу для каждого). –

ответ

1

Это очень маловероятно, что двоичный файл будет выполняться как на Mac, так и на Linux. Если довольно вероятно, что двоичный файл не будет выполняться между различными дистрибутивами Linux. Вы можете скомпилировать бинарный файл для каждой ОС. Или вы можете распространять исходный код для своего приложения и позволить пользователям самостоятельно их компилировать.

Различные версии libstdC++, поэтому, вероятно, распространяются с различными ОС, и это вызовет проблемы. Решение, которое частично работает, - это статическая компиляция вашего двоичного файла, чтобы вы не зависели от установленной библиотеки, установленной на целевой системе.

+1

Возможно ли, что модификации, которые я делаю на mac, для кода, первоначально разработанного на платформе linux, вызовут проблемы, когда код будет скомпилирован на платформе linux после изменений? Я имею в виду, я вижу, что двоичные файлы хрупки между различными платформами, но как насчет фактического исходного кода? – Cemre

+1

Очень и очень. Вот почему писать переносимый код сложно. Если вы придерживаетесь чистого ANSI C или C++, ваш код должен компилироваться на любой платформе без проблем. Но есть некоторые gotchya, например, Endian ordering, значения по умолчанию для максимальных длин имен файлов, размер определенных типов. Как только вы узнаете разницу, вы обычно справляетесь с ними с помощью #if WINDOW, это #elif MAC делает это #elif WEIRD_OS делает #endif. В качестве примера в прошлой работе мы поддерживаем 8 разных ОС и 4 основных (и всегда незначительных inbetween) версий нашего программного обеспечения. Эффективно мы поддерживали более 300 различных версий нашего кода :-) –

+2

Также в Mac OS вы можете создавать универсальные двоичные файлы, которые могут содержать 32-битный и 64-разрядный код одновременно, даже ориентируясь на разные процессоры. Не так в Linux. Вы можете реально достичь совместимости с исходным кодом, но не бинарно. Один и тот же код обычно компилируется на Mac и Linux, с небольшими различиями, особенно если вы нацеливаетесь только на x86 и не имеете графического интерфейса. Но вы должны скомпилировать его для разных платформ, часто даже для разных дистрибутивов. Если вы построите недавний Ubuntu, ваш двоичный файл не будет работать на старых дистрибутивах. Статическая привязка может помочь с исполняемыми файлами, но не с общими объектами. –

0

MacOS не является Linux, он может иметь немного общего с BSD, но определенно не Linux. Они используют или могут использовать разные конфигурации одного и того же компилятора, но программы несовместимы.

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

Смежные вопросы