Bagaimana saya bisa membangun rpm untuk target i386 pada mesin x86-64?

8

Saya membangun rpm menggunakan rpmbuildperintah sebagai:

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

Ketika saya menggunakan mesin SLED 10 SP3 x86 saya, itu berjalan dengan sukses. Tetapi pada Mesin Virtual SLES 10 SP3 x64 saya, ini memberikan kesalahan berikut:

error: No compatible architectures found for build

Awalnya saya tidak menggunakan --targetopsi, masih berjalan di mesin x86, tetapi kesalahan yang sama ada di mesin x64.

Tolong bantu saya untuk mengatasi kesalahan ini

Jangan Khawatir Anak
sumber

Jawaban:

6

Dari dokumentasi Fedora untuk rpm, file spesifikasi, dan 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

Jadi, seperti yang dikatakan, pastikan Anda memiliki kompiler tambahan yang diinstal (misalnya gcc.i686 & gcc.x86_64).

Brian Redbeard
sumber
Iya. Istilah untuk itu, seperti yang juga disebutkan dalam cuplikan, adalah cross-compiler . Itulah yang perlu Anda instal, dan harus didokumentasikan dengan baik bagaimana melakukannya (kompilasi silang, walaupun bukan sesuatu yang sering ditemui pengguna biasa, cukup umum di kalangan pengembang).
CVn
3

Karena Anda menggunakan flag "-bb" yang artinya Anda membangun dari biner sehingga Anda tidak perlu menginstal kompiler untuk arsitektur lain.

Cukup singkirkan baris "Buildarch" di file spesifikasi Anda dan berikan dari baris perintah

--target i386

atau

--target x86_64

Dan itu harus membuat rpms untuk Anda.

adnan kamili
sumber