gcc / cmake를 사용하여 64 비트 Linux 시스템에서 32 비트 바이너리를 컴파일하는 방법
그것은에서 프로젝트를 컴파일하는 것이 가능 32 비트 와 cmake와 gccA의 64 비트 시스템? 그럴 수도 있지만 어떻게해야합니까?
매개 변수 / 플래그 / 등을 설정하지 않고 "무지한"방법을 시도했을 때 LD_LIBRARY_PATH링크 된 라이브러리를 찾기 위해 설정 ~/tools/lib하면 무시하고 lib64 라는 하위 디렉토리 만 찾습니다 .
export CFLAGS=-m32
$ gcc test.c -o testc
$ 파일 testc
testc : GNU / Linux 2.6.9 용 ELF 64 비트 LSB 실행 파일, x86-64, 버전 1 (SYSV), 동적 링크 (공유 라이브러리 사용).
$ ldd testc
linux-vdso.so.1 => (0x00007fff227ff000)
libc.so.6 => /lib64/libc.so.6 (0x000000391f000000)
/lib64/ld-linux-x86-64.so.2 (0x000000391ec00000)
$ gcc -m32 test.c -o testc
$ 파일 testc
testc : GNU / Linux 2.6.9 용 ELF 32 비트 LSB 실행 파일, Intel 80386, 버전 1 (SYSV), 동적 링크 (공유 라이브러리 사용)
$ ldd testc
linux-gate.so.1 => (0x009aa000)
libc.so.6 => /lib/libc.so.6 (0x00780000)
/lib/ld-linux.so.2(0x0075b000)
간단히 말해 : -m32플래그를 사용하여 32 비트 바이너리를 컴파일하십시오.
또한 필요한 모든 라이브러리의 32 비트 버전이 설치되어 있는지 확인하십시오 (필자의 경우 Fedora에서 필요한 것은 glibc-devel.i386입니다)
이후 버전의 CMake에서 각 대상에서 수행하는 한 가지 방법은 다음과 같습니다.
set_target_properties(MyTarget PROPERTIES COMPILE_FLAGS "-m32" LINK_FLAGS "-m32")
나는 그것을 세계적으로 할 수있는 방법을 모른다.
C ++의 경우 다음을 수행 할 수 있습니다.
export CXXFLAGS=-m32
이것은 cmake와 함께 작동합니다.
한 가지 방법은 chroot 환경을 설정하는 것입니다. 데비안은 debootstrap 과 같은 다양한 툴을 가지고 있습니다.
복잡한 응용 프로그램의 경우 lxc 컨테이너 를 사용하는 것이 좋습니다 . lxc 컨테이너는 '스테로이드의 chroot와 본격적인 가상 머신 사이의 중간에있는 것'입니다.
예를 들어, Ubuntu Trusty 시스템에서 lxc를 사용하여 32 비트 와인을 만드는 방법은 다음과 같습니다.
sudo apt-get install lxc lxc-templates
sudo lxc-create -t ubuntu -n my32bitbox -- --bindhome $LOGNAME -a i386 --release trusty
sudo lxc-start -n my32bitbox
# login as yourself
sudo sh -c "sed s/deb/deb-src/ /etc/apt/sources.list >> /etc/apt/sources.list"
sudo apt-get install devscripts
sudo apt-get build-dep wine1.7
apt-get source wine1.7
cd wine1.7-*
debuild -eDEB_BUILD_OPTIONS="parallel=8" -i -us -uc -b
shutdown -h now # to exit the container
다음은 lxc를 사용하여 64 비트 호스트에서 32 비트 와인을 빌드하는 방법에 대한 위키 페이지 입니다.
'Programing' 카테고리의 다른 글
| 경고 메시지 :`…`: 유효하지 않은 요인 수준, NA 생성 (0) | 2020.07.07 |
|---|---|
| 자식에서 '둘 다 추가'병합 충돌을 해결 하시겠습니까? (0) | 2020.07.06 |
| PostgreSQL 8.4에서 열 데이터 유형을 문자에서 숫자로 변경하는 방법 (0) | 2020.07.06 |
| numpy 배열을 반복 (0) | 2020.07.06 |
| os.walk ()를 사용하여 파이썬에서 디렉토리를 재귀 적으로 순회 (0) | 2020.07.06 |