Почему 32-битный пакет .deb не устанавливается на 64-битную Ubuntu? - PullRequest
4 голосов
/ 12 июня 2010

Мой пакет .deb, созданный на 32-разрядной Ubuntu и содержащий исполняемые файлы, скомпилированные с помощью gcc, не будет установлен на 64-разрядной версии ОС (в сообщении об ошибке указано «Неверная архитектура i386»). Это сбивает с толку меня, потому что я думал, что в целом 32-разрядное программное обеспечение работает на 64-разрядном оборудовании, а не наоборот.

Смогу ли я создать файл .deb, который я смогу установить на 64-битной ОС, используя мою 32-битную машину? Это просто вопрос использования соответствующих флагов компилятора для создания исполняемых файлов (и если да, то каковы они), или сам файл .deb как-то специфичен для архитектуры одного процессора?

Ответы [ 2 ]

6 голосов
/ 12 июня 2010

Вероятно, установщик deb отказывается устанавливать ваш пакет, поскольку он (правильно) помечен конфликтующим полем Architecture :.Код i386 может быть выполнен на машине amd64, но он требует наличия всех соответствующих зависимостей (32-битных библиотек и т. д.).Лучше создавать отдельные пакеты для каждой архитектуры.

Да, вы можете собрать 64-битную версию на 32-битной машине.Это называется кросс-компиляция, и для этого необходимо создать среду сборки.Для начала вам может потребоваться поиск инструментов dpkg-cross и apt-cross.

В качестве альтернативы, вы можете просто установить виртуальную машину с 64-битной ОС и собрать для нее вторичную архитектуру.

2 голосов
/ 12 июня 2010

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

Как правило, большинство 32-битных программ будут нормально работать на 64-битных. Однако, если у вас не очень старый ПК, также очень легко установить мини-64-битный Debian на виртуальную машину VirtualBox. Вероятно, вам нужны только библиотеки base + build essentials + dev. Это не займет много места на диске. Если вы можете сэкономить 2G дискового пространства, просто установите рабочий стол Debian.

Существует больше возможностей для кросс-компиляции с различной степенью автоматизации.

Я регулярно использую метод virtualbox. Это просто и быстро.

Если вы используете 64-разрядную версию Linux, создание 32-разрядной среды так же просто, как mkdebootstrap + linux32 + chroot.

...