Comment puis-je créer un rpm pour la cible i386 sur une machine x86-64?

8

Je construis un rpm en utilisant la rpmbuildcommande comme:

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

Lorsque j'utilise ma machine SLED 10 SP3 x86, elle fonctionne correctement. Mais sur ma machine virtuelle SLES 10 SP3 x64, cela donne l'erreur suivante:

error: No compatible architectures found for build

Au départ, je n'utilisais pas l' --targetoption, elle fonctionnait toujours sur une machine x86, mais la même erreur était là dans la machine x64.

Aidez-moi à résoudre cette erreur

Ne vous inquiétez pas enfant
la source

Réponses:

6

À partir de la documentation de Fedora pour rpm, fichiers spec et 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

Donc, comme il est dit, assurez-vous que les compilateurs supplémentaires sont installés (par exemple gcc.i686 & gcc.x86_64).

Brian Redbeard
la source
Oui. Le terme pour cela, comme également mentionné dans l'extrait de code, est cross-compiler . C'est ce que vous devez installer, et il devrait être assez bien documenté comment le faire (la compilation croisée, bien que ce ne soit pas quelque chose qu'un utilisateur ordinaire rencontrera très souvent, est assez courante chez les développeurs).
un CVn du
3

Puisque vous utilisez l' indicateur "-bb" , ce qui signifie que vous construisez à partir du binaire , vous n'avez donc pas besoin d'installer de compilateurs pour d'autres architectures.

Débarrassez-vous simplement de la ligne "Buildarch" dans votre fichier de spécifications et passez-la depuis la ligne de commande

--target i386

ou

--target x86_64

Et cela devrait créer les rpms pour vous.

adnan kamili
la source