bbs

Здравствуйте Гость ( Вход | Регистрация )

 
ОтветитьСоздать новую темуСоздать новое голосование

Каскадный · [ Стандартный ] · Линейный

> Кроссплатформенный запуск, Вопрос внутри

 Welers
post 7.07.2010 - 18:45
Отправлено #1


Group Icon
Сообщений: 83
Рег.: 14.04.10
ID No.: 29 199
Предположим, есть скомпилированный под Windows код:

#include <stdio.h>

int main()
{
printf("Hello world!\n");
}

Так как двоичные коды приложений для процессора не различаются между linux, windows и mac, установленных на Intel, значит функция main будет скомпилирована одинаково для всех платформ.

Вопрос - как ручками, без компилятора, переделать заголовок исполняемого файла, скажем, из windows к linux.
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
 jaw
post 7.07.2010 - 19:45
Отправлено #2


Group Icon
Сообщений: 421
Рег.: 20.04.05
ID No.: 2 283
Цитата (Welers @ 7.07.2010 - 18:45)
Предположим, есть скомпилированный под Windows код:

#include <stdio.h>

int main()
{
  printf("Hello world!\n");
}

Так как двоичные коды приложений для процессора не различаются между linux, windows и mac, установленных на Intel, значит функция main будет скомпилирована одинаково для всех платформ.

Вопрос - как ручками, без компилятора, переделать заголовок исполняемого файла, скажем, из windows к linux.
*


никак

Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
 marcus
post 7.07.2010 - 23:42
Отправлено #3


Group Icon
Сообщений: 6 128
Рег.: 18.01.05
ID No.: 1 192
Цитата (jaw @ 7.07.2010 - 19:45)
никак
*

Почему ж? Можно. Только это бред, конечно. Боюсь, не только заголовок придется переделывать. Перекомпилируй и не занимайся фигней.

Сообщение отредактировал marcus - 7.07.2010 - 23:44
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
 Welers
post 10.07.2010 - 16:49
Отправлено #4


Group Icon
Сообщений: 83
Рег.: 14.04.10
ID No.: 29 199
Для меня не трудно держать виртуальные машины.
Но я занимаюсь разработкой языка, который транслируется в С++ и затем компилируется. Основное направление графического редактора - более быстрое создание игр. И там мне желательно сделать кросскомпиляцию под все известные платформы.
Сервера компиляции не выход - не безопасно для крупных разработчиков.
Весь движок линкуется на SDL библиотеку.


Добавлено Welers - Jul 10 2010, 04:49 PM
For Marcus - Извините, но не вам решать, что для меня фигня, а что нет. У каждого свои инструменты и предпочтения.
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
 Welers
post 10.07.2010 - 16:59
Отправлено #5


Group Icon
Сообщений: 83
Рег.: 14.04.10
ID No.: 29 199
Нет, конечно было бы круто, если бы под Windows был инструмент кросс компиляции, но я пока на такой не натыкался.
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
 marcus
post 10.07.2010 - 17:05
Отправлено #6


Group Icon
Сообщений: 6 128
Рег.: 18.01.05
ID No.: 1 192
Welers, вы очень сумбурно все описываете. Сначала приводите Хеллоу Ворлд и спрашиваете, можно ли заменой заголовка запустить его под Линукс. Ответ: можно, если владеть приемами отладки и декомпиляции. Одним заголовком, боюсь, тут дело не ограничится: не стоит забывать, например, про директорию импорта и системные функции запуска консоли.

Далее вы говорите, что разрабатываете целый язык и какой-то графический редактор. В случае такого проекта подобное "портирование", думаю, займет в разы больше времени, чем было потрачено на саму разработку. Код будет различаться очень сильно, и пофигу что везде Интел. Простейшая операция проталкивания в стек аргументов функции различается на разных платформах.


Цитата
Нет, конечно было бы круто, если бы под Windows был инструмент кросс компиляции, но я пока на такой не натыкался.

Почитайте про кроссплатформенную разработку в целом, на RSDN например. Это далеко не полностью автоматизированный процесс.

Сообщение отредактировал marcus - 10.07.2010 - 17:07
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
 permea
post 10.07.2010 - 17:17
Отправлено #7


Group Icon
Сообщений: 666
Рег.: 22.12.06
ID No.: 12 692
Цитата (Welers @ 7.07.2010 - 19:45)
Так как двоичные коды приложений для процессора не различаются между linux, windows и mac, установленных на Intel, значит функция main будет скомпилирована одинаково для всех платформ.

Ложный вывод.
- Во-первых, гуглить про рантайм языков си/си++.
- Во-вторых, про динамические библиотеки
- В-третьих, про elf format / PE-format

Если хочется суровой кроссплатформенности с минимумом усилий, есть java. Да, все уже украдено до вас.
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
 Welers
post 11.07.2010 - 11:32
Отправлено #8


Group Icon
Сообщений: 83
Рег.: 14.04.10
ID No.: 29 199
Java педалит код в виртуальной машине, что сказывается на производительности.
Marcus: ХеллоВорлд я привел для простоты эксперимента.
Портировать таким способом редактор я не буду. Под *графическим редактором* я имел ввиду среду разработки с графическими GUI и удобствами. Идея в том, чтобы разработанная среда могла компилировать приложения сразу под разные платформы, без нужды в перезагрузках, виртуальных машинах или серверов компиляции.

Сообщение отредактировал Welers - 11.07.2010 - 11:35
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
 permea
post 11.07.2010 - 11:44
Отправлено #9


Group Icon
Сообщений: 666
Рег.: 22.12.06
ID No.: 12 692
Цитата (Welers @ 11.07.2010 - 12:32)
Java педалит код в виртуальной машине, что сказывается на производительности.
*

Ага. Уще гуглить магические слова jit, hotspot jvm
все приличные реализации java для сервера/десктопа с компиляцией в нативный код.
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
 marcus
post 11.07.2010 - 13:49
Отправлено #10


Group Icon
Сообщений: 6 128
Рег.: 18.01.05
ID No.: 1 192
Цитата (Welers @ 11.07.2010 - 11:32)
Портировать таким способом редактор я не буду. Под *графическим редактором* я имел ввиду среду разработки с графическими GUI и удобствами. Идея в том, чтобы разработанная среда могла компилировать приложения сразу под разные платформы, без нужды в перезагрузках, виртуальных машинах или серверов компиляции.
*

Я лично вижу два пути:
1. Компилировать и линковать проект для конкретной платформы отдельно
2. Компилировать все в оп-код, а потом транслировать по мере надобности в натив-код для конкретной платформы

Скомпилировать код единожды, а потом подставлять разные заголовки не получится. Посему не вижу ничего более адекватного, быстрого и удобного, как вариант 1.
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
 Welers
post 11.07.2010 - 16:06
Отправлено #11


Group Icon
Сообщений: 83
Рег.: 14.04.10
ID No.: 29 199
А если так:

Я создаю, к примеру, функцию DrawLine;
DrawLine может обращаться к чему угодно. Эту библиотеку я вручную скомпилирую под разные архитектуры.

Затем, пользователь в моей среде разработки обращается к DrawLine.
Исполняемая программа конечного пользователя - это вызов DrawLine из библиотеки.

Насколько мне известно, вызов функций из библиотек при запуске парсится по имени. Если я напишу шелл для всех нужных функций, возможно, удастся как то слепить нужную фичу.
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
 permea
post 11.07.2010 - 16:43
Отправлено #12


Group Icon
Сообщений: 666
Рег.: 22.12.06
ID No.: 12 692
Цитата (Welers @ 11.07.2010 - 17:06)
Эту библиотеку я вручную скомпилирую под разные архитектуры.
*

boost, qt.
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
 marcus
post 11.07.2010 - 16:50
Отправлено #13


Group Icon
Сообщений: 6 128
Рег.: 18.01.05
ID No.: 1 192
Цитата (Welers @ 11.07.2010 - 16:06)
А если так:

Я создаю, к примеру, функцию DrawLine;
DrawLine может обращаться к чему угодно. Эту библиотеку я вручную скомпилирую под разные архитектуры.

Затем, пользователь в моей среде разработки обращается к DrawLine.
Исполняемая программа конечного пользователя - это вызов DrawLine из библиотеки.

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

Если скомпилировать функцию для различных платформ - кое-что получится.

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

Все равно придется по-разному обращаться к этой функции из программы. Если составить программу так, что в ней будут одни голые вызовы - может удасться облегчить задачу smile.gif

Цитата
boost, qt.

+1

Сообщение отредактировал marcus - 11.07.2010 - 17:06
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
 Welers
post 14.07.2010 - 14:04
Отправлено #14


Group Icon
Сообщений: 83
Рег.: 14.04.10
ID No.: 29 199
Хорошо, пусть Java компилирует код при запуске. Просто по разным мнениям программистов рунета писать тяжелые игры на Java не получится, т.к. это сказывается на производительности.
Дело в подходе к коду, или проблема в самой Java?

--
Boost тяжеловесен, как и Qt. Причем Qt наворотил свою систему дефайнов. Религия не позволяет мне смотреть на все эти Qint.
Поэтому пока вожусь с SDL. Но его header подлючает функции библиотеки по дефайнам win32, linux, mac, что означает - придется писать шелл над ним.

Пока обойдусь обычной компиляцией. Через год другой будет видно. Всем спасибо за знания.
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение

ОтветитьОпции темыСоздать новую тему
2 чел. читают эту тему (2 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
 

 rss   Упрощённая версия Сейчас: 17.09.2019 - 20:50