Как я могу построить rpm для цели i386 на компьютере x86-64?

8

Я строю RPM с помощью rpmbuildкоманды как:

rpmbuild -bb --root <DIRECTORY> --target i386 --define "_topdir <DIRECTORY>" <specfile>.spec

Когда я использую компьютер SLED 10 SP3 x86, он успешно работает. Но на моей виртуальной машине SLES 10 SP3 x64 выдает следующую ошибку:

error: No compatible architectures found for build

Первоначально я не использовал --targetопцию, все еще он работал на компьютере с архитектурой x86, но такая же ошибка была на компьютере с архитектурой x64.

Пожалуйста, помогите мне решить эту ошибку

Не беспокойся, дитя
источник

Ответы:

6

Из документации Fedora для rpm, spec-файлов и rpmbuild:

The --target option sets the target architecture at build time. Chapter 3,
Using RPM covers how you can use the --ignoreos and --ignorearch options 
when installing RPMs to ignore the operating system and architecture that 
is flagged within the RPM. Of course, this works only if you are installing 
on a compatible architecture.

On the surface level, the --target option overrides some of the macros in 
the spec file, %_target, %_target_arch, and %_target_os. This flags the RPM 
for the new target platform.

Under the covers, setting the architecture macros is not enough. You really 
cannot create a PowerPC executable, for example, on an Intel-architecture 
machine, unless you have a PowerPC cross compiler, a compiler that can make 
PowerPC executables.

http://docs.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/RPM_Guide/ch-rpmbuild.html

Поэтому, как говорится, убедитесь, что у вас установлены дополнительные компиляторы (например, gcc.i686 & gcc.x86_64).

Брайан Редберд
источник
Да. Термин для этого, как также упоминается во фрагменте, является кросс-компилятором . Это то, что вам нужно установить, и это должно быть довольно хорошо задокументировано, как это сделать (кросс-компиляция, хотя обычные пользователи не часто сталкиваются с ней, довольно часто встречается среди разработчиков).
CVN
3

Поскольку вы используете флаг "-bb", это означает, что вы строите из двоичного кода, поэтому вам не нужно устанавливать компиляторы для других архитектур.

Просто избавьтесь от строки «Buildarch» в вашем spec-файле и передайте ее из командной строки

--target i386

или

--target x86_64

И это должно создать RPM для вас.

Аднан Камили
источник