다음 명령을 사용하여 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 시스템에서는 동일한 오류가 발생했습니다.
이 오류를 해결하도록 도와주세요.
답변1
사용하고 계시기 때문에"-bb"깃발은 당신이 건물을 짓고 있음을 의미합니다.바이너리따라서 다른 아키텍처용 컴파일러를 설치할 필요가 없습니다.
사양 파일에서 "Buildarch" 줄을 제거하고 명령줄에서 전달하면 됩니다.
--target i386
또는
--target x86_64
그것은 당신을 위해 개정판을 생성해야 합니다.
답변2
rpm, 사양 파일 및 rpmbuild의 Fedora 문서:
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
)를 설치해야 합니다.
답변3
가장 쉬운 방법은 x86 VM을 시작하고 이를 기반으로 구축한 다음 i386 또는 i686 rpm을 x86_64 시스템에 복사하는 것입니다.
답변4
당신이 원하는 것:--target i386-redhat-linux
glibc.i686
glibc-devel.i686
그러나 이는 32비트 및 64비트 코드를 모두 생성할 수 있는 다중 아키텍처 컴파일러가 설치되어 있어야 하는 경우에만 작동합니다 .
Red Hat에서 제공하는 GCC는 GCC가 완벽하게 이 작업을 수행할 수 있고 AIX, Solaris, IRIX 및 심지어 PPC와 같은 실제 UNIX 운영 체제에서도 쉽게 수행할 수 있음에도 불구하고 의도적으로 이를 수행할 수 없게 되었습니다. Red Hat 시스템을 기반으로 합니다.
따라서 이 작업을 수행하려면, 그리고 GCC를 사용하여 이 작업을 수행하려면 (만약!) 자신만의 GCC 버전을 빌드하고 패키징해야 하며 다중 아키텍처 빌드를 명시적으로 활성화해야 합니다. GCC가 ./configure
GCC가 GNU/Linux를 기반으로 구축되었음을 감지하는 경우(그리고 ! 경우에만) 스크립트는 기본적으로 이 작업을 수행하지 않습니다.
또 다른 옵션은 GNU/Linux용 Intel, PGI 또는 Sun Studio 컴파일러를 설치하여 사용하는 것입니다. 그러나 이러한 컴파일러는 더 현명하고 표준을 준수하며 GCC의 이식 불가능한 구문 구조 중 상당수를 허용하지 않습니다.