Como criar uma rpm para o destino i386 em uma máquina x86-64?

8

Estou criando um rpm usando o rpmbuildcomando como:

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

Quando uso minha máquina SLED 10 SP3 x86, ela é executada com êxito. Mas na minha máquina virtual SLES 10 SP3 x64, é apresentado o seguinte erro:

error: No compatible architectures found for build

Inicialmente eu não estava usando a --targetopção, ainda estava em execução na máquina x86, mas o mesmo erro ocorreu na máquina x64.

Ajude-me a resolver este erro

Não se preocupe criança
fonte

Respostas:

6

Na documentação do Fedora para rpm, arquivos spec e 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/pt-BR/Fedora_Draft_Documentation/0.1/html/RPM_Guide/ch-rpmbuild.html

Portanto, como ele diz, verifique se você possui os compiladores adicionais instalados (por exemplo, gcc.i686 e gcc.x86_64).

Brian Redbeard
fonte
Sim. O termo para ele, como também mencionado no snippet, é compilador cruzado . É isso que você precisa instalar, e deve estar bem documentado como fazê-lo (a compilação cruzada, embora não seja algo que um usuário comum encontre com muita frequência, é bastante comum entre os desenvolvedores).
um CVn,
3

Como você está usando o sinalizador "-bb", o que significa que você está construindo a partir do binário , não precisa instalar compiladores para outras arquiteturas.

Livre-se da linha "Buildarch" no seu arquivo de especificação e passe-a na linha de comando

--target i386

ou

--target x86_64

E deve criar os rpms para você.

adnan kamili
fonte