Когда программа рекурсивно статически компилируется (при условии, что все связанные библиотеки допускают статическую компиляцию и являются своего рода независимыми от платформы в своем коде, я знаю, что это возможно, потому что мне удалосьстатически скомпилировать nano из Ubuntu для запуска на x86 Android, и это сработало, потому что оно не связывалось с системными библиотеками), действительно ли безопасно предполагать, что оно автономно?То есть, нужно ли что-нибудь еще от платформы (например, Linux, Windows, ... и т. Д.)?Я подозреваю, что ответ - да.Итак, соответственно ...
Для простоты, если я возьму эту программу (без зависимостей):
int main(){
return 0;
}
Я могу легко скомпилировать это статически (поскольку, очевидно, она не имеет зависимостей) и должна произвестинативный код, который работает на базовой архитектуре (скажем, архитектуре x86).
Я знаю, что есть оболочки, которые передают переменные окружения и другие вещи, которые будут различаться в зависимости от платформы (например, Windows EXE или исполняемый файл Linux).
Отложив обертки на минуту, возникает вопрос: если бы я статически скомпилировал предыдущую программу, используя GCC в Linux, смог бы я теоретически быть в состоянии запустить еена винде?
Возвращаясь к оболочкам, если я знаю, как конвертировать оболочки из Windows в Linux и наоборот, нужно ли мне перекомпилировать программу, чтобы переместить ее из одной в другую?