Какие рекомендации по переносу кода C++ на MacOS?

В предстоящем проекте есть планы перенести существующий код C++, который компилируется в Windows и Linux, на MacOS (леопард). Программное обеспечение представляет собой приложение командной строки, но может быть запланирован интерфейс с графическим интерфейсом. MacOS использует компилятор g ++. Имея тот же компилятор, что и Linux, не похоже, что возникнут какие-либо проблемы, но они всегда есть.

Есть ли какие-либо рекомендации или проблемы, на которые следует обратить внимание во время порта?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
0
1 603
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Мы не портировали на MacOS, но портировали на различные Unix из Linux, основной рабочей областью были системы установки и запуска, поэтому рассчитывайте перенести большую часть работы на них (учитывая, что ваш существующий уже переносится между Linux и Windows).

Ответ принят как подходящий

У вашего приложения есть графический интерфейс и какой (родной / Qt / Gtk +)?

Если нет, то проблемы, которых следует остерегаться (по сравнению с Linux), в основном связаны с динамической компоновкой. OS X использует -dylib и -bundle и фактически имеет два типа динамических библиотек (загружаемые во время выполнения и обычные). В Linux есть только один вид (-shared), и в любом случае он более свободен.

Если ваше приложение имеет графический интерфейс, вам нужно будет перекодировать все это в Какао, используя Objective-C. Это означает, что вам тоже понравится новый язык. Некоторые люди (например, MS) использовали Carbon (C++ API), но его использование постепенно прекращается. Я бы не рекомендовал это для новых проектов.

Вам больше всего повезет с использованием Qt или Gtk +. Собственный порт Gtk + был (повторно) объявлен несколько дней назад (см. Имендио).

p.s. OS X, конечно, также запускает двоичные файлы X11, но продвигать это к любому из ваших клиентов может быть трудным путем. Они привыкли к интерфейсу Aqua, и с этим продуктивно. Считайте X11 только очень краткосрочным решением.

p.p.s. Количество дополнительных библиотек с открытым исходным кодом, поставляемых с OS X, ограничено, и их версии могут не отставать. В то время как в Linux вы можете легко потребовать от пользователей установить «libxxx v.y.y», в OS X существует несколько подходов к упаковке (fink, macports), а для коммерческого инструмента требуемые библиотеки должны содержаться в приложении. OS X предлагает для этого «пакеты приложений» и «фреймворки» (локальные копии, что делает приложение самодостаточным). В Linux нет такой концепции. Это также сильно повлияет на вашу систему сборки; может быть, вы захотите попробовать что-то вроде SCons для всех платформ?

Почему бы не сохранить основной код на C++ и переписать код GUI на Objective-C?

Ferruccio 28.09.2008 22:19

Да, это действительно правильный путь. Мое «вам придется все кодировать в какао» было преувеличением.

akauppi 07.10.2008 16:21

Macintosh (macosx) - это, по сути, FreeBSD под капотом (хотя она была изменена). Есть некоторые различия в системном программировании между Linux и FreeBSD. В первую очередь эти различия существуют между различными системными вызовами ... поэтому то, насколько это влияет на вас, будет зависеть от того, что делает ваше приложение, и от того, какие системные вызовы ОС вы делаете во время выполнения.

Вам не нужно перекодировать все в Objective-C. Существует странная ублюдка C++ и Objective-C, которая позволит вам использовать код C++ из Objective-C, чтобы вы могли разумно разделить код модели на C++ и код представления / контроллера в Objective-C. Чтобы использовать Objective-C, просто добавьте к файлам исходного кода суффикса .mm вместо .m, и вы сможете смешивать наиболее допустимый синтаксис C++ и Objective-C даже в одной строке.

Другие вопросы по теме