Войти
ПрограммированиеФорумОбщее

Совместимость процессоров для одной операционной системы.

Страницы: 1 2 3 Следующая »
#0
23:19, 21 дек. 2020

Как обеспечить полную совместимость программы для разных процессоров по своей сути?!
Мне надо об этом заботится? Или всё же приложение скомпилированное на процессоре x86-64 будет работать на процессоре ARM64? Если да, то как мне получить библиотеки для процессора ARM?

Эта проблема, похоже, касается не только MacOS, но и Linux?!


#1
(Правка: 22 дек. 2020, 0:16) 23:35, 21 дек. 2020

Mirrel
> совместимость программы для разных процессоров по своей сути?
> скомпилированное на процессоре x86-64 будет работать на процессоре ARM64?

Разумеется нет.

Mirrel
> Эта проблема, похоже, касается не только MacOS, но и Linux?!

Эта проблема не ОС, а именно процессора (с их разными системами команд).

Причём для/на Linux она решается проще всего: там принято всё иметь в исходниках и
соответственно условия для кросскомпиляции комфортнее.

#2
0:06, 22 дек. 2020

Мне бы больше информации!!!
Мне надо создавать приложение совместимое с разными платформами и процессорами (нынче любят кроссплатформенное, но нет, именно для отдельной системы, но совместимое с таким же в другой системе, работающее с общими данными).

Что от меня требуется? Обязательно найти все поддерживаемые библиотеки (используемые в моём приложении) для каждой ОС и для каждого процессора данной системы? (компиляция по умолчанию будет под нужную систему).

#3
0:57, 22 дек. 2020

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

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

#4
3:28, 22 дек. 2020

Некоторые библиотеки растпространяются с прекомпилированными бинарями для разных осей и процессоров.

Например LWJGL имеет отдельные сборки для разных осей и архитектур процессоров:
Изображение

Исходники открыты, так что можете подсмотреть, как именно они это делают.

#5
15:03, 22 дек. 2020

Mirrel
Обеспечивать совместимость должен компилятор.
Если рассматривать например FreePascal, то он поддерживает несколько архитектур: x86, Arm, Sparc, PowerPC.
Delphi например поддерживает x86, Android, MacOS, Linux
Java вообще везде работает, где ее поддержку сделали.

В общем все зависит от уровня абстракции кода от железа в компиляторе.

#6
16:06, 22 дек. 2020

Насколько я помню, ARM менее терпим к выравниванию данных. Там, где x86 медленно, но продолжит работать, ARM кинет исключение.
В остальном проблем вроде нет.

#7
19:32, 22 дек. 2020

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

#8
0:55, 23 дек. 2020

Кто-то понял о чём я вёл речь, а кто-то нет.

Я создаю исходный код, который могу компилировать под разные системы. Но этот исходный код использует внутренние или сторонние библиотеки (допустим физика Chipmunk). С внутренними понятно, что они будут уже в установленной системе. А вот сторонние...

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

Как мне "добывать" скомпилированные под нужную систему и нужный процессор, такие библиотеки. Я же не могу десятки компьютеров покупать или мне (ради этих библиотек) тонны эмуляторов ставить?

#9
2:09, 23 дек. 2020

Mirrel
> человек, запускающий эту программу, скомпилированную для того процессора, что
> стоит у этого человека, мог без проблем пользоваться этой программой, не заботясь о сторонних библиотеках.

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

Mirrel
> Я же не могу десятки компьютеров покупать или мне (ради этих библиотек) тонны эмуляторов ставить?

Их конечно не десятки и тонны, но да именно так это и происходит.

Для каждой OS/ABI target ты должен иметь комплект необходимых либ (учитывая еще и способ линковки static/shared) и их зависимостей.
Добывать: скачиваешь/билдишь сам (в нужной среде). Но это в теории, а на практике это всегда гемор: у каждой свой make, cmake итд.

Лучше использовать джаву / или движок. Или отдельного человека, т.к. очень большой объем работ.

#10
(Правка: 4:19) 4:18, 23 дек. 2020

Mirrel
> Как мне "добывать" скомпилированные под нужную систему и нужный процессор,
> такие библиотеки. Я же не могу десятки компьютеров покупать или мне (ради этих
> библиотек) тонны эмуляторов ставить?
Все библиотеки под юниксовые системы должны быть в исходниках. Компилируешь их - и все. Компилируешь на целевой машине, в процессе установки.

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

#11
4:24, 23 дек. 2020

Не все библиотеки идеальны, конечно. Иногда специально так делают, чтобы без поллитры установить не смогли. Вроде и доступно все самостоятельно, но разобраться смогут немногие. Авторы так зарабатывают. Софт бесплатный, консультации по нему платные.

#12
(Правка: 5:20) 5:14, 23 дек. 2020

Mirrel
> Как мне "добывать" скомпилированные под нужную систему и нужный процессор,
> такие библиотеки. Я же не могу десятки компьютеров покупать или мне (ради этих
> библиотек) тонны эмуляторов ставить?
это называется кросс-компиляция!
т.е. на системе x64, присутствуют утилиты и библиотеки для сборки в ARM.

В конкретно твоём случае, Apple о тебе позаботилось и все необходимые утилиты, а так же системные библиотеки для кросс-компиляции x64->arm уже в наличии. (При условии что ты сидишь на Интеловском Catalina или Big Sur с распоследним Xcode-ом)

Вилы могут быть непосредственно при сборке конкретной библиотеки.
Т.к. ты имеешь дело с Си(подобными) языками, и опенсорцем, то ты никогда не угадаешь какую систему сборки будет использовать очередная библиотека.
В лучшем случае всё обойдётся командами

 configure
 make CPU_TARGET="arm64"
Собственно, кросс-компиляцию уже сам make разрулит.

В худшем случае, тебе придётся ставить или систему сборки (какой-нить cmake или ant или ещё что-нить).
В ещё более грустном случае, придётся допиливать скрипт сборки.
Например вот тут показали что нужно поменять чтобы собрать OpenSSL под Apple M1.
и без этой ручной доводки нифига не будет кросс-компилироваться!

Но у тебя же fink и homebrew, и тебе, наверное, пофиг... а может они только головной боли добавляют! :)

ЗЫ: естественно, нужно быть морально готовым, когда хвалённая "Юниксовая совместимость на уровне искходников" нифига не работает под Мак. Потому что Мак это особый Юникс, и любители Опенсорца редко его толком тестируют. В этом случае придётся править чуть ли не сами исходники. Опять же зависит от конкретной библиотеки и случая.

ЗЗЫ: на линуксе всё тоже самое. Начинается с того, что ты ставишь инструментарий (binutils) для кросс-компиляции. Они ставяться чуть сложнее чем обновление Xcode.
А дальше все те же самые шаги. Разве что шанс на пороться на "несовместимость" чуть меньше.

#13
9:34, 23 дек. 2020

Mirrel
> Как мне "добывать" скомпилированные под нужную систему и нужный процессор,
> такие библиотеки. Я же не могу десятки компьютеров покупать или мне (ради этих
> библиотек) тонны эмуляторов ставить?

Берёшь исходники и компилируешь в нужную систему, точно таким же способом, как компилируешь под эту систему своё приложение. Если у библиотеки нет исходников, то сразу  отказываешься от неё..

#14
10:12, 23 дек. 2020

0iStalker
> Если у библиотеки нет исходников, то сразу  отказываешься от неё..

вот как ... а какие всякие там коммерческие использования аля HASP ?

Страницы: 1 2 3 Следующая »
ПрограммированиеФорумОбщее