Попытка (и неудачная попытка) запустить 32-разрядную программу C ++ для Hello World в 64-разрядной версии Ubuntu в Windows 10

Я настроил свою новую Ubuntu на Windows 10 с нуля следующим образом:

# apt-get update
# apt-get install build-essential
# # Am able to compile now using "g++ -Wall -o Hello-World Hello-World.cpp", the binary is working.

# # To check versions, and that both packages were indeed installed
# gcc -v
# make -v

# apt-get install g++-multilib
# # This also installs gcc-multilib as a dependency
# # Now able to compile using "g++ -m32 -Wall -o Hello-World Hello-World.cpp
# # However the binary Hello-World can't be run. Error message "bash: ./Hello-World: cannot execute binary file: Exec format error

# apt-get install lib32gcc1 lib32stdc++6
# # Those two packages are at this time already both installed and well

# dpkg --add-architecture i386
# apt-get update
# apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
# # Still getting the same error when wanting to ./Hello-World

Я думаю, я все еще скучаю по xyz:i386 libraryЯ просто не могу понять, чего еще не хватает. Также я не уверен, относится ли это к «Ubuntu в Windows» или же это произошло бы при аналогичной процедуре на обычной 64-битной ОС Ubuntu. У вас есть какие-нибудь предложения?

И для завершения, это содержание Hello-World.cpp файл:

#include <iostream>

using namespace std;

int main (int argc, char **argv)

{

cout << "Hellobaby" << endl;

return 0;
}

5

Решение

Я думаю, что вы установили не все зависимости, связанные с g ++. Выполните нижеуказанные команды для установки зависимостей.

sudo apt-get install g++

введите описание изображения здесь

введите описание изображения здесь

1

Другие решения

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

Спасибо всем за ваши комментарии

1

QEMU и binfmt поддерживают свет 🙂

https://github.com/microsoft/wsl/issues/2468#issuecomment-374904520

После прочтения, что WSLInterop между процессами WSL и Windows использует binfmt, я возился с QEMU, чтобы попытаться разработать ARM, и случайно обнаружил, как заставить работать 32-битную поддержку.

Требуется «Обновление создателей осени», 1709, сборка 16299 или новее

Установите qemu и binfmt config:

sudo apt install qemu-user-static
sudo update-binfmts --install i386 /usr/bin/qemu-i386-static --magic '\x7fELF\x01\x01\x01\x03\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x03\x00\x01\x00\x00\x00' --mask '\xff\xff\xff\xff\xff\xff\xff\xfc\xff\xff\xff\xff\xff\xff\xff\xff\xf8\xff\xff\xff\xff\xff\xff\xff'

Вам нужно будет заново активировать поддержку binfmt при каждом запуске WSL:

sudo service binfmt-support start

Включить пакеты архитектуры i386:

sudo dpkg --add-architecture i386
sudo apt update
sudo apt install g++:i386

Попробуйте это:

$ file /usr/bin/g++-5
/usr/bin/g++-5: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=9835ed3e5b1c8707591630e314ba4030a571deec, stripped

$ /usr/bin/g++-5 --version
g++-5 (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ g++ -m32 -Wall helloworld.cpp -o helloworld

$ ./helloworld
Hello, world!

$ file helloworld
helloworld: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=65905fae78b837162a29d618b4ce63d300c62cb6, not stripped

И чтобы доказать, что это действительно работает, отключите поддержку i386 и попробуйте снова:

$ sudo service binfmt-support stop
* Disabling additional executable binary formats binfmt-support [ OK ]

$ ./helloworld
-bash: ./helloworld: cannot execute binary file: Exec format error
0
По вопросам рекламы [email protected]