¿Cómo puedo construir un rpm para el objetivo i386 en una máquina x86-64?

8

Estoy construyendo un rpm usando el rpmbuildcomando como:

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

Cuando uso mi máquina SLED 10 SP3 x86, se ejecuta con éxito. Pero en mi máquina virtual SLES 10 SP3 x64, aparece el siguiente error:

error: No compatible architectures found for build

Inicialmente no estaba usando la --targetopción, todavía se estaba ejecutando en la máquina x86, pero el mismo error estaba allí en la máquina x64.

Por favor, ayúdame a resolver este error

No te preocupes niño
fuente

Respuestas:

6

De la documentación de Fedora para rpm, archivos de especificaciones y 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

Entonces, como dice, asegúrese de tener instalados los compiladores adicionales (por ejemplo, gcc.i686 y gcc.x86_64).

Brian Barba Roja
fuente
Si. El término para ello, como también se menciona en el fragmento, es compilador cruzado . Eso es lo que necesita instalar, y debe estar bastante bien documentado cómo hacerlo (la compilación cruzada, aunque no es algo que un usuario habitual encuentre muy a menudo, es bastante común entre los desarrolladores).
un CVn
3

Dado que está utilizando el indicador "-bb" , lo que significa que está construyendo a partir de binario, por lo que no necesita instalar compiladores para otras arquitecturas.

Simplemente elimine la línea "Buildarch" en su archivo de especificaciones y páselo desde la línea de comando

--target i386

o

--target x86_64

Y debería crear las rpm para usted.

adnan kamili
fuente