LINUX.ORG.RU

Кроссплатформеность - основы, источники для начинающих


0

1

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

В общем суть вопроса - что нужно знать для умения перекидывать код на различные архитектуры (Х86, Х64, АРМ 32бит)? Хотелось бы получить более подробные ссылки на литературу, форумы, статьи, блоги. Можно на английском, но желательно русский.

В общем имеются GCC 4.5.2 и прочий набор тулчейнов. Есть опыт компилирования, линкования ресурсников под АРМ для Андроида.

В общем интересует написание бустбилдных файлов, компиляция, статическая и динамическая линковка, ARM/THUMB режимы. Как пример интересует допустим портирование DOOM или QUAKE с Х86 под АРМ. Как это правильно сделать и в какой последовательности.

Сильно не пинать, я только это изучаю.

Спасибо всем за внимание.



Последнее исправление: arthur_s (всего исправлений: 1)

Кросплатформенность не совместима с таким низкоуровневым говном, каким является сишечка. Правильный подход такой - переписать quake на нормальный язык, выскоуровневый и кроссплатформенный (читай, Common Lisp).

настоящий lovesan

anonymous
()

нууу, по-моему, специальных манускриптов на тему кросс-платформенности особо не существует, это само должно прийти, с опытом разработки на разных процессорных архитектурах

Harald ★★★★★
()
Ответ на: комментарий от anonymous

Правильный подход такой - переписать quake на нормальный язык, выскоуровневый и кроссплатформенный (читай, Java).

Поправил.

LongLiveUbuntu ★★★★★
()
Ответ на: комментарий от Harald

Програмистких скилов я не имею, изучаю Баш, читаю книгу «С++ за 21 день». Может что то можно придумать, дайте литературу с чего отталкиваться чтоб хотя бы это все понимать. спс

arthur_s
() автор топика
Ответ на: комментарий от arthur_s

В общем С++ код я не смогу нормально с Х86 на АРМ 32бит перевести?

нормальный С++ код и так корректно соберется и отработает, как ты думаешь тот же debian под arm собирают

anonymous
()
Ответ на: комментарий от LongLiveUbuntu

Правильный подход такой - переписать quake на нормальный язык, выскоуровневый и кроссплатформенный (читай, Java).

все правильно - современное железо наконец-то потянет первый квейк на Java

anonymous
()

Сложная это штука. Я, например, когда сменил архитектуру с 32-битной на 64-битную, один свой велосипед очень долго просматривал в поисках ошибок. Главное, конечно, - не использовать архитектурнозависимые типы данных.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от arthur_s

Програмистких скилов я не имею, изучаю Баш, читаю книгу «С++ за 21 день».

А смысл тогда сейчас задумываться о кросс-платформенности?

В общем случае надо знать, что:

-бывает порядок байт little endian и big endian
-на разных архитектурах (а также ОС и версиях компиляторов) размеры базовых типов и указателей могут быть различными
-доступ к памяти по невыровненному адресу может вызывать исключение (например, в ARM обращение к памяти должно происходить по адресам, кратным 4)

и еще over дофига всяких нюансов

Harald ★★★★★
()

а можно по сути вопроса порекомендовать литературу с чего нужно начать чтоб хотя бы понимать основы всего процесса от компилирования и до полной сборки рабочих файлов?

arthur_s
() автор топика
Ответ на: комментарий от Harald

И разве нет таких простых способов, допустим мне дали код и я должен его собрать под определенную архитектуру с уже имеющимися тулчейнами, в конфигурации просто поменяв таргет-платформу? Компилятор и набор тулзовин GCC.

arthur_s
() автор топика
Ответ на: комментарий от arthur_s

с чего нужно начать

С выбора библиотек (SDL,QT,...), и средств описания проекта (cmake,...), а от этого и пойдёт литература. Основные ошибки при написании плохо переносимого кода тебе уже сказали, к ним можно добавить: ASM-вставки, платформо-зависимые библитеки. А так, при правильно подобранном наборе библиотек, и аккуратном использовании типов кроссплатформенный код получается очень легко

AlexVR ★★★★★
()
Ответ на: комментарий от AlexVR

>выбора библиотек (SDL,QT,...), и средств описания проекта (cmake,...), а от этого и пойдёт литература. Основные ошибки при написании плохо переносимого кода тебе уже сказали, к ним можно добавить: ASM-вставки, платформо-зависимые библитеки. А так, при правильно подобранном наборе библиотек, и аккуратном использовании типов кроссплатформенный код получается очень легко

Вот это то что мне нужно. Какие библиотеки порекомендуете? Описание проэкта скорее стандартным make (makefile).

arthur_s
() автор топика
Ответ на: комментарий от arthur_s

И разве нет таких простых способов, допустим мне дали код и я должен его собрать под определенную архитектуру с уже имеющимися тулчейнами, в конфигурации просто поменяв таргет-платформу? Компилятор и набор тулзовин GCC.

Не всё так просто. Чем больше используется не кроссплатформенных библиотек, ленивых вставок и долбанутых оптимизаций, тем больше вероятность, что перенос кода равносилен его полному переписыванию. А ещё если к этому добавить интернационализацию...

AlexVR ★★★★★
()
Ответ на: комментарий от arthur_s

Описание проэкта скорее стандартным make (makefile).

Ты хоть понял что ляпнул? Зачем по твоему существуют cmake и autoconfig

А выбор библиотек напрямую зависит от поставленных задач. Если игры, то посмотри на код открытых инди-игр, упоминаний о которых на ЛОРе полным полно

AlexVR ★★★★★
()
Ответ на: комментарий от anonymous

Кросплатформенность не совместима с таким низкоуровневым говном, каким является сишечка. Правильный подход такой - переписать quake на нормальный язык, выскоуровневый и кроссплатформенный (читай, Common Lisp).

а мужики то не знают!

exception13 ★★★★★
()
Ответ на: комментарий от AlexVR

Ты хоть понял что ляпнул? Зачем по твоему существуют cmake и autoconfig

я с этим не ознакомлен(((((

А что скажете про emdebian, qemu?

arthur_s
() автор топика
Ответ на: комментарий от exception13

Не обращай внимания! Кто-то упорно косит под лавсана. Как пить дать, питонщик или даже школьник.

dave ★★★★★
()

Нужно уметь алгоритмически думать, знать язык программирования, уметь на нем програмировать, иметь опыт разработки для каждой из необходимых платформ. Тогда и только тогда ты изучишь кросплатформенность для твоих правтформ...

Jetty ★★★★★
()
Ответ на: комментарий от arthur_s

С++ код я не смогу нормально с Х86 на АРМ 32бит перевести? Вроде как бы это реализуемо?

ну, как минимум тулзы для анализа последствий переноса точно есть. Может уже и автоматизировали...

true_admin ★★★★★
()
Ответ на: комментарий от arthur_s

По основам почитай что-нибудь про архитектуру компьютера - Таненбаума, например. Там и про сборку программ рассказывается.

Если C++ не очень нужен - лучше его пока не трогать, с нуля он слишком сложен. Названные игры на C написаны.

http://www.unix.org/whitepapers/64bit.html

http://www.dwheeler.com/program-library/Program-Library-HOWTO/

unsigned ★★★★
()
Ответ на: комментарий от unsigned

Ок, спасибо за ответы. Тогда отталкнемся от следующего. Подскажите как происходит весь цикл создания рабочих файлов, начиная с этапа «вот есть уже готовый *.срр и что мне дальше с ним делать?». Хочу понять всю логику. Лучше будет если будут примеры. Я так понял что MAKE-файл собирает это все от и до автоматом?

Не бейте за глупые вопросы, а лучше поправьте где надо. Спасибо за внимание.

arthur_s
() автор топика

Генерируются все файлы, необходимые для сборки, переносятся в проект, пишется makefile, исправляются ошибки, пока не соберется. Полезно отключать некоторые части кода, чтобы поскорее к такому состоянию придти. Часто нужно добавлять еще и зависимости. Если они с открытым кодом, то можно прямо в виде кода в тот же проект и добавить, не забыв про makefile. Основные сложности будут с графикой, звуком и вводом.

note173 ★★★★★
()
Ответ на: комментарий от note173

В общем почитал теории немного, понял что мне нужно научиться писать кросс-платформенные мейки. Из самого актуального - boost::build, cmake & autoconf. В общем чем отличаются они и что предпочтительнее? boost::build как я понял более актуальна?

arthur_s
() автор топика
Ответ на: комментарий от arthur_s

Сначала вручную портируй без всякой кроссплатформенности, а потом уже занимайся скриптами сборки. Сборка — самое легкое.

note173 ★★★★★
()
Ответ на: комментарий от thrall

Всем добрый вечер! Начитался много инфы и теперь имею кашу в голове((((( Помогите разобраться с такими вещами как boost.build, bjam, jam, JAMROOT, JAMFILE. Мне хотя бы понять основные принцыпы работы и как это все правильно запустить, тот же пример на Hello World на C++. Примеры в основном под NT, а надо под Убунту. Как собрать, например OpenSSL, с чего начать анализ? Руководствуюсь статьями http://www.ibm.com/developerworks/ru/library/l-Jam_1/ . С них же примеры на начальном уровне работают, но как это объеденить с бустом? Я понимаю что Вы тут все умные и можете просто послать, но все же я надеюсь на толковые отзывы новичку, мне сложно разбираться, но желание есть.

arthur_s
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.