2017-02-07 12 views
0

У меня есть Windows 10 с пользовательским пространством Ubuntu на базе подсистемы Windows Linux с установленным пакетом gcc. Используя gcc -static, я построил статически скомпонованный бинарник, hello, что обычные утилиты описать следующим образом:Связаны ли статически связанные двоичные файлы с gcc на подсистеме Windows Linux, переносимые во все системы Windows?

$ ldd hello 
     not a dynamic executable 

$ file hello 
hello: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.24, BuildID[sha1]=xxx, not stripped 

Если взять этот исполняемый файл в случайной системе Windows, которая не имеет в Linux-поддерживающую подсистему инсталлирован, он все еще работает?

+0

[Этот вопрос] (http://stackoverflow.com/questions/38786014/how-to-compile-executable-for-windows-with-gcc-with-linux-subsystem) предлагает не – Novelocrat

ответ

1

Нет. Он требует, чтобы WSL отображал вызовы ядра Linux в Windows. Во-вторых, для загрузки требуется bash, поскольку это исполняемый файл ELF, а не Windows.

+0

Нужно загрузить bash это, в частности? Это было бы необычной модификацией кода запаса bash, который просто вызывал бы 'exec()' на пути к запрошенной команде. Я предполагаю, что любая программа, работающая под WSL, может сделать то же самое. – Novelocrat

+0

bash.exe - это программа для Windows, которая активирует подсистему Windows для Linux и делает некоторые другие вещи, такие как открывать консоль Windows. В настоящее время, если вы убьете этот процесс, весь процесс Linux, который он породил прямо или косвенно, также убит, так что да * bash.exe * Windows * не совпадает с bash в Ubuntu. Другими словами, вы не можете вызвать Linux exec() до тех пор, пока не будут активированы вызовы ядра WSL Linux. – Yttrill

+0

В частности, WSL - это просто код, который переводит вызовы ядра из Linux в Windows, но он не может работать, если не создана подходящая среда. В Linux это делается путем загрузки вашего компьютера (включение его). Таким образом, программа windows bash.exe должна каким-то образом эмулировать загрузку путем создания среды. Например, установка Windows C: диск как/mnt/c /, настройка/proc и т. Д. И т. Д. – Yttrill

 Смежные вопросы

  • Нет связанных вопросов^_^