[잡담] cross compile 환경 꾸리신분들 대단들하심...

emptynote의 이미지

"64비트 멀티코어 OS 원리와 구조" 책은 샀는데,

64비트와 32비트 클로스 컴파일 환경을 꾸리라고 하는데,

2.2 장을 채운 명령어들을 보니깐...

따라하기쯤이야 하다가,

데비안 64bit 사용하기에 한번 32bit만들어 볼려고 혼자 아웅 다웅해본결과

cross compile 환경 구축하신분들이 새삼 존경스럽네요.

정말로 쉽지 않군요.

binutils 소스 받아서 컴파일중에 TARGET="x86_32-pc-linux" 하니깐

"checking target system type... Invalid configuration `x86_32-pc-linux': machine `x86_32-pc' not recognized"

이렇게 뜨는군요.

56p "여기서 잠깐" 중간에 나오는 "OS 개발도 개발 환경을 구축하는 단계가 절반을 차지합니다"

정말로 가슴깊이 와 닿네요.

1) 데비안에서 하는데까정 하다가 웹에서 찾아 본다.
2) 데비안에서 웹에서 찾아본후 그대로 해 본다.
3) 속편하게 책과 동일환 환경에서 따라하기로 하자

3가지 방법중 선택의 순간이 오는군요.

익명 사용자의 이미지

TARGET는 내정된 값이 있습니다 그냥 x86_32라는 값을 configure스크립트에서 전혀 모르기때문에 오류가 나는겁니다.

i486/i586/i686-pc-linux 중에 하나를 지정하시면 잘 될겁니다. 잘 안되면 configure 스크립트를 살펴보시길.

그리고 cross-compiler는 보통은 직접 컴파일하지 않고 누군가가 바이너리로 빌드해놓은 것을 많이 쓰죠.
빌드자체가 어려운 것은 아니지만, 버전특성도 타고... 검색해보시면 누군가가 좀 더 빌드하기 쉽게 만들어둔 문서/스크립트 등등도 많이 찾으실 수 있습니다.

emptynote의 이미지

말씀하신대로 검색해서 하나 하나 해봐야겠네요.

그래도 클로스 컴파일 환경 척척 혼자서 만드시는분들 존경합니다.

에구구, 환경 꾸리기 todo text 파일 만들려면 포맷 여러번해야겠네요.

----------------- 설마 multilib package 면 32bit 64bit 한방에 OK되는건가요???
----------------- 일단 확인될때까정 cross compile 환경 꾸리기 난이도에 관련 글은 올리지 말아야겠군요.
http://jmanbal.tistory.com/entry/64%EB%B9%84%ED%8A%B8%EC%97%90%EC%84%9C-32%EB%B9%84%ED%8A%B8-%EC%BB%B4%ED%8C%8C%EC%9D%BC%EC%8B%9C-stubs-32h-%EC%97%90%EB%9F%AC%EA%B0%80-%EB%B0%9C%EC%83%9D%ED%95%98%EB%A9%B4

익명 사용자의 이미지

64bit OS에서 32bit 컴파일하는것도 크로스컴파일이고,
A운영체제에서 B운영체제 바이너리 빌드하는 것도 크로스컴파일(mingw32)
x86에서 ARM용 바이너리 빌드하는것 역시 크로스컴파일입니다.

자알 알려진 크로스컴파일러로는 ARM, MIPS용 등등이 있습니다.
안드로이드 빌드하는 것도 미리 빌드된 컴파일러가 함께 배포되고있고,
배포되는 SDK에도 크로스컴파일러가 들어있을겁니다. (x86리눅스에서 ARM용 바이너리 얻는)

따라서 검색어를 자알 선택하셔야 원하는 검색결과(x86_64에서 i386/486 etc.)를 찾을 수 있습니다.

Prentice의 이미지

그냥 간단하게 32bit 환경 구축이 필요하시면 chroot 환경으로 해결하시는 수도 있습니다:
http://ubuntu.or.kr/wiki_old/wiki.php/Amd64Ia32Chroot

위 자료는 오래된 자료이므로... 어떤 과정인지 대충 훑어만 보시고, debian amd64 chroot로 검색해서 요즘 어떤 해법이 있는지 찾아보세요.

---

그런데... 적고 보니 책 내용 때문에 꼭 cross-compile 환경이 필요하신가보네요. ^^;; 그냥 참고만 해주세요. 감사합니다.

ipes4579의 이미지

저는 뭘 하든 환경 구축하는데 꽤 오래 걸리더군요.
안드로이드 개발환경 구축하려 해도 인트라넷상이라 괜시리 오래걸리고
노트북 하나 새로 받으면 VM 으로 돌려도 되는 걸 윈도우 + 해킨토시 + 젠투를 굳이 세팅하고
아직 emacs 세팅도 만족할 만한 수준은 아니라 허구헌날 .el 파일들 찾아다니고 ㅎㅎ
그래도 이런 삽질 하나하나가 내공이 되는 것 같습니다. ^^ 삽질 화이팅입니다~!

익명 사용자의 이미지

저랑 같은 책을 사셨군요. 그전에 이 책의 지은이 블로그에 들러본 적이 있어서 책이 나왔다길래 반가운 마음에 거금을 들여 저도 샀습니다.
결론부터 말씀드리면 x86_64는 하나의 고유한 명칭이지 x86 계열(인텔)의 64비트란 보통명사가 아닙니다. 그러므로 x86_16,x x86_32란
프로세서 아키텍쳐는 없습니다. http://gcc.gnu.org/install/specific.html에 타겟 목록이 나와있습니다.

크로스컴파일에 관해서는 kldp에도 검색을 하면 나올 겁니다.

세벌의 이미지

emptynote의 이미지

방금.. PC 포맷후 데비안 설치한 상태에서,

시냅틱에서 gcc-multilib 를 설치한후 64bit, 32bit 생성이 되네요.

데비안이라면 apt-get xxxx 로만으로도 64bit와 32bit 정도는 간단히 요리가 되었으면 하는데,

다행히? 되어서 기쁘네요.

맨땅에 해딩을 한다면 어려운것을 이렇게 간단하게 처리해 주신 공헌자분들께 감사~드립니다.

--------------
허당:~/sample$ cat test.c
#include
#include
#include

int main(){
setlocale(LC_CTYPE, "");
wchar_t a = L'한';
putwchar(a);
return 0;
}

허당:~/sample$ rm test32 test64; ls -l test32 test64
ls: cannot access test32: 그런 파일이나 디렉터리가 없습니다
ls: cannot access test64: 그런 파일이나 디렉터리가 없습니다
허당:~/sample$ gcc -m32 -o test32 test.c
허당:~/sample$ gcc -m64 -o test64 test.c
허당:~/sample$ file test32
test32: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped
허당:~/sample$ file test64
test64: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped

kkamagui2000의 이미지

워낙 허접한 실력이다보니 초반부터 혼란스럽게 해드리는군요.

죄송합니다. ㅠㅠ 다음번(?)에는 개발 환경 설정 부분을 좀더 신경써야겠네요. ㅠㅠ

사신 분들께 다시 한번 감사의 말씀을 드립니다. (_ _)