다음 플랫폼 모두에서 실행되어야 하는 프로젝트가 있습니다.
- 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
이는 다중 아키텍처 프로그램 개발에 익숙한 사람들에게 두 가지 질문을 제기합니다.
- 도서관을 어떻게 관리해야 하나요? 수동으로 빌드해야 합니까?
- makefile을 올바르게 만드는 방법은 무엇입니까? 32비트 버전과 64비트 버전은 서로 다른 위치에 설치해야 할 것 같은데...
참고 1:나는 이런 일이 일어나는 것을 알아차리지 못했습니다 make clean
. 단, 64비트와 32비트는 폴더를 공유하면 안 됩니다.
노트 2:여기에는 -lstdc++
C++ 표준 라이브러리가 포함됩니다. 즉 나에겐 그런 것조차 없다는 뜻이다.
답변1
서로 다른 아키텍처의 대상 파일이 서로 다른 디렉터리에 기록되도록 빌드 스크립트를 설정해야 합니다. Windows 개체와 Unix 개체는 서로 다른 파일 이름( *.obj
및 *.exe
및 *.o
) 을 사용하므로 자연스럽게 충돌이 없지만 *
Unix 시스템은 동일한 파일 이름을 사용합니다.
또는 각 빌드의 소스 코드를 다른 디렉터리에 추출합니다.
라이브러리의 경우 32비트( …:i386
) 개발 패키지와 기본 64비트 개발 패키지를 설치해야 합니다. 또는,chroot에서 32비트 설치 설정, 이는 몇 GB의 디스크 공간을 사용하지만 유지 관리가 매우 적고 실행 중인 배포판 이외의 배포용 패키지를 안정적으로 생성하는 가장 쉬운 방법입니다.