Другие языки программирования и технологии

Перетаскивание Java-программы и C++-программы с Windows на Linux, пара вопросов

В общем, думаю о переносимости.
С++ компилит в .ехе-шники.
.ехе ест только Windows, разве нет?

Я так понимаю, под Linux нужно пересобирать проект под Linux'ом?

Java переводит в .jar-ники?
.jar одинаково читается и на Windows и на Linux, или нужно опять-же пересобирать?
Начнём.

1. JAVA2. Пересобирать (в случае правильного проектирования для много поточный приложений) - ничего не нужно. Зато нужно позаботиться о совместимости версий JVM - той, под которой java - проект компилировался, и той, под которой он будет выполняться. Откуда могут взяться подводные камни?

- устаревшие (deprecated - не рекомендованные к применению) классы и методы: если не хочешь перепроектировать и далее пересобирать проект - просто запусти его с ключом -d
- запрет на доступ к ресурсам: апплет использует сеть, а доступ запрещён.. . решение - административные меры - поставь нужные разрешения
- о проектировании и многопоточных приложениях: окна и никсы используют принципиально различные модели многозадачности и многопоточной работы. Основа многозадачности для окон - поток, для никсов - процесс. Если в приложение использует непосредственное прерывание (приостановку) потоков (в java - метод sleep(n)), то под окнами у него ещё есть шанс получить управление (модель многозадачности - не вытесняющая, квантование времени между приложениями происходит на основе их приоритета) . Под никсами такая ситуация невозможна в принципе - если поток управление отдал, он его не получит назад иначе, чем явным образом - этот путь при разработке многопоточных приложений и есть правильный (общепризнан таковым) . Если ты неправильно организовал работу много поточного приложения - тебе не только надо пересобрать проект, а прежде всего его ПОЛНОСТЬЮ ПЕРЕПРОЕКТИРОВАТЬ.

2 C++. Пересобирать нужно, да ещё надо найти подходящий компилятор (gcc - подойдёт очень часто да вот не всегда!! ! особенно, если твой проект касается темы АСУТП, и использует специфические библиотеки сторонних производителей - они могут и свои инструменты разработки поставлять, и требовать особых настроек ОС, и.. . ещё много чего - это тема сложная, тут бардак очень большой - каждый в своём болоте ставит свои, одному ему известные ориентиры и ловушки...) . Возможные тонкости:

- Насчёт многопоточной работы - всё, что для JAVA2 - В СИЛЕ. На 100%. Иначе проект и на никсах и на окнах будет себя вести, как минимум, странно.
- наличие нужных тебе библиотек под никсом (не знаю, например, найдёшь ли ты библиотеки никсовые, работающие с .NET ...)
- спецификации вызова методов, создания классов и т. д. - проект например с Visual C++ придётся очень солидно переделать.. .

Единственное ограничение реальное - JAVA2 при разработке АСУТП если и используется, то только в интерфейсной части middleware и на стороне клиента. Далее применение этой технологии - не только нецелесообразно, но и опасно (быстродействие низкое, а значит, наверняка, недопустимое время ответа) . В остальном - переносимость JAVA выше, чем у C++. JAVA изначально нёс в себе идею переносимости, в C++ её приходится привносить искусственно, по ходу работы.. .
СЕ
Сергей Ермаков
2 926
Лучший ответ
а QT что, не годится?