64비트 시스템에서 32비트 프로젝트를 빌드하는 일반적인 방법이 있습니까?

64비트 시스템에서 32비트 프로젝트를 빌드하는 일반적인 방법이 있습니까?

다음 플랫폼 모두에서 실행되어야 하는 프로젝트가 있습니다.

  • x86 승리
  • x64 승리
  • 리눅스(데비안) x86
  • 리눅스(데비안) x64

Windows 및 Linux x64에 대한 컴파일을 수행했지만 작동하는지 확실하지 않습니다. 플랫폼 하나가 빠졌는데, 바로 Linux x86입니다. x64/x32를 신경 쓰지 않는 makefile이 있습니다. 32비트 구성을 추가해야 합니다. 나는 다음을 통해 이 작업을 수행할 수 있다는 것을 배웠습니다 make.

make configuration CFLAGS=-m32

하지만 실제로 실제 32비트 빌드를 수행하는지 확실하지 않습니다. 명령을 사용할 때 컴파일이 발생하지 않습니다.1프로그램이 연결 단계로 직접 이동하면 호환되지 않는 라이브러리에 대해 불평합니다.2:

/usr/bin/ld: cannot find -lboost_system
/usr/bin/ld: skipping incompatible /usr/lib//liblog4cplus.so when searching for -llog4cplus
/usr/bin/ld: skipping incompatible /usr/lib//liblog4cplus.a when searching for -llog4cplus
/usr/bin/ld: skipping incompatible /usr/local/lib/liblog4cplus.so when searching for -llog4cplus
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.9/../../../liblog4cplus.so when searching for -llog4cplus
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.9/../../../liblog4cplus.a when searching for -llog4cplus
/usr/bin/ld: skipping incompatible //usr/local/lib/liblog4cplus.so when searching for -llog4cplus
/usr/bin/ld: skipping incompatible //usr/lib/liblog4cplus.so when searching for -llog4cplus
/usr/bin/ld: skipping incompatible //usr/lib/liblog4cplus.a when searching for -llog4cplus
/usr/bin/ld: cannot find -llog4cplus
/usr/bin/ld: skipping incompatible /usr/local/ssl/lib//libcrypto.a when searching for -lcrypto
/usr/bin/ld: cannot find -lcrypto

이는 다중 아키텍처 프로그램 개발에 익숙한 사람들에게 두 가지 질문을 제기합니다.

  1. 도서관을 어떻게 관리해야 하나요? 수동으로 빌드해야 합니까?
  2. makefile을 올바르게 만드는 방법은 무엇입니까? 32비트 버전과 64비트 버전은 서로 다른 위치에 설치해야 할 것 같은데...

참고 1:나는 이런 일이 일어나는 것을 알아차리지 못했습니다 make clean. 단, 64비트와 32비트는 폴더를 공유하면 안 됩니다.
노트 2:여기에는 -lstdc++C++ 표준 라이브러리가 포함됩니다. 즉 나에겐 그런 것조차 없다는 뜻이다.

답변1

서로 다른 아키텍처의 대상 파일이 서로 다른 디렉터리에 기록되도록 빌드 스크립트를 설정해야 합니다. Windows 개체와 Unix 개체는 서로 다른 파일 이름( *.obj*.exe*.o) 을 사용하므로 자연스럽게 충돌이 없지만 *Unix 시스템은 동일한 파일 이름을 사용합니다.

또는 각 빌드의 소스 코드를 다른 디렉터리에 추출합니다.

라이브러리의 경우 32비트( …:i386) 개발 패키지와 기본 64비트 개발 패키지를 설치해야 합니다. 또는,chroot에서 32비트 설치 설정, 이는 몇 GB의 디스크 공간을 사용하지만 유지 관리가 매우 적고 실행 중인 배포판 이외의 배포용 패키지를 안정적으로 생성하는 가장 쉬운 방법입니다.

관련 정보