[완료]64bit x86_64 시스템에서, 32비트로 c화일을 컴파일 하려면 어떻게 해야하나요?

Leo Park의 이미지

안녕하세요.
32비트에서 작성되고 사용되어지고 있는 화일을....
64비트의 시스템에서 32비트로 컴파일을 하려고 하는데...잘 안됩니다.

현재 상태가 아래와 같습니다.
---------------------------------------------------------------------------------------------------------------

bmk_mgr@ikdp101[20]: gcc --version
gcc (GCC) 3.4.3 20041212 (Red Hat 3.4.3-9.EL4)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

bmk_mgr@ikdp101[21]: uname -a
Linux ikdp101 2.6.9-5.ELsmp #1 SMP Wed Jan 5 19:29:47 EST 2005 x86_64 x86_64 x86_64 GNU/Linux

----------------------------------------------------------------------------------------------------------------

-m64 옵션은 잘 되는데...-m32 옵션은 에러가 납니다...이게 중요한데...-_-;;

bmk_mgr@ikdp101[79]: gcc -m64 -o test32 test.c
bmk_mgr@ikdp101[80]: gcc -m32 -o test32 test.c
/usr/bin/ld: crt1.o: No such file: そのようなファイルやディレクトリはありません
collect2: ld はステータス 1 で終了しました
bmk_mgr@ikdp101[198]: gcc -m32 -march=i686 -o test test.c
/usr/bin/ld: crt1.o: No such file: そのようなファイルやディレクトリはありません
collect2: ld はステータス 1 で終了しました
bmk_mgr@ikdp101[199]: gcc -m32 -march=i586 -o test test.c
/usr/bin/ld: crt1.o: No such file: そのようなファイルやディレクトリはありません
collect2: ld はステータス 1 で終了しました
bmk_mgr@ikdp101[200]: gcc -m32 -march=i486 -o test test.c
/usr/bin/ld: crt1.o: No such file: そのようなファイルやディレクトリはありません
collect2: ld はステータス 1 で終了しました
bmk_mgr@ikdp101[201]: gcc -m32 -march=i386 -o test test.c
/usr/bin/ld: crt1.o: No such file: そのようなファイルやディレクトリはありません
collect2: ld はステータス 1 で終了しました
----------------------------------------------------------------------------------------------------------------

아시는분 계시면 부탁드립니다.
그럼, 감사드리고 새해 복 많이 받으세요.

only2sea의 이미지

크로스컴파일러를 설치하셔야 할 것입니다.
x86 뿐만 아니라 다른 아키텍쳐용 컴파일러들도 있습니다.

블로그: http://turtleforward.blogspot.com

Leo Park의 이미지

안녕하세요.
답글 감사드립니다.
그런데....제가 지금 하려는 것은 크로스컴파일 아니라....

현재 32비트 Unix환경에서 컴파일 되고 사용되는 프로그램들을...
64비트 Linux환경에서 사용하려고 합니다.
즉, 32비트 환경에 있는 소스를 수정하지 않고...컴파일만으로 64비트 환경에서 32비트로 컴파일 하고 싶습니다.
여러곳을 찾아 보았지만 명쾌한 답이 없어서...이렇게 질문드립니다.

이런경우, 컴파일 방법이나 옵션만으로 가능한지....
아니면 소스를 변경하지 않고 가능한 방법이 있는지 알고 싶습니다.

그럼, 고수님들이 조언 기다리겠습니다.
감사합니다.

■■■■■■■
http://leo.cbnu.ac.kr/
Dream as if you'll live forever, live as if you'll die tomorrow.

익명 사용자의 이미지

Quote:
64비트 환경에서 32비트로 컴파일 하고 싶습니다.

이게 크로스 컴파일 아닌가요?
Leo Park의 이미지

안녕하세요.
답글 감사드립니다.

제가 개념을 잘못 잡고 있는지 모르겠습니다.
저는 크로스컴파일은 지금 사용하는 OS에서 다른 OS에서 사용할 목적으로 컴파일하는 것으로 알고 그렇게 표현습니다.
그러나, 저는 지금 사용하는 OS에서 컴파일하고 지금 OS에서 사용하려고 합니다.
그런데, 현재 소스가 32비트에 맞게 만들어져 있고, 그렇게 사용되고 있습니다.
그래서, 현재의 소스는 수정하지 않고 컴파일로 가능한 방법을 찾고 있습니다.
64비트OS에서 32비트로 돌아가게 하는게 저의 목적입니다.

설명이 매끄럽지 못한것 같은데...양해 바라고, 도움 기다리겠습니다.
감사합니다.

■■■■■■■
http://leo.cbnu.ac.kr/
Dream as if you'll live forever, live as if you'll die tomorrow.

익명 사용자의 이미지

흠... 제가알기론 그런 방법은 없는거 같은데...
어떤 프로그램인지는 모르겠으나... 소스가 32비트용 CPU로 만들어져 있다면, long과 포인터 등 몇몇 자료형만 신경써서 바꿔주시면 64비트에서도 똑같은 기능을 할 것 같습니다.
소스 다 보기 귀찮으면 일단 64비트에서 컴파일 해보고 경고나는부분을 중점적으로 보면 대부분 데이터크기 문제입니다.

ymir의 이미지

별 일 없이 컴파일 될 것 같긴 한데용.. ;;
일단.. 에러부터 체크해 보시죠..? crt1.o 파일이 없다는데..
glibc-devel 쪽에 있는 파일인 것 같습니다만..??

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

Leo Park의 이미지

안녕하세요. 답글 감사합니다.
그런데, crt1.o 파일이 glibc-devel 쪽에 있는 파일 같다고 하셨는데....
제가 이번에 첨으로 리눅스를 사용하고 있어서....
찾지 못하고 있습니다.
확인 방법 좀 알려주실수 있을까요?
그럼, 즐거운 하루 되세요.

Dream as if you'll live forever, live as if you'll die tomorrow.

■■■■■■■
http://leo.cbnu.ac.kr/
Dream as if you'll live forever, live as if you'll die tomorrow.

shyblue의 이미지

32bit용 glibc가 설치되지 않아서 그렇습니다.
-m32옵션이 들어오면, 32bit용 라이브러리를 사용해서 링크를 하게 되는데, 32bit library가 설치되지 않았기 때문에, -m32옵션을 사용하지 못하는 경우라고 할 수 있습니다.

時日也放聲大哭

時日也放聲大哭

Leo Park의 이미지

안녕하세요. 답글 감사드립니다.
32비트 라이브러리는 설치되어 있는 것 같습니다.
현재 문제가 되는 컴파일을....32비트OS에서 컴파일하여 실행파일을 64비트OS로 옮겨서 실행화일을 돌려보면, 문제없이 돌아갑니다.
그런 이유로 현재 64비트OS에도 32비트 라이브러리가 설치되어 있다고 생각되는데....
혹시, 컴파일시키는 라이브러리와 실행시키는 라이브러리가 다를수도 있나요?
혹은, 32비트 라이브러리의 설치여부를 확인 하는 방법이 있을까요?
그럼, 즐거운 하루 되시고 감사합니다.

Dream as if you'll live forever, live as if you'll die tomorrow.

■■■■■■■
http://leo.cbnu.ac.kr/
Dream as if you'll live forever, live as if you'll die tomorrow.

ymir의 이미지

제 글까지 포함해서 보충하자면..

컴파일된 오브젝트 파일에 라이브러리를 링크해서 실행파일을 생성해야 하는데, 해당 서버에 링크에 필요한 crt1.o 가 없다는 뜻입니다. (crt1.o 에 대해서는 구글신에게..)
이미 컴파일된 바이너리의 실행과는 별개의 문제입니다.

Linux 가 Red Hat 같은데 rpm 패키지 검사해 보시고, 없다면 rpmfind.net 같은데에서 관련 패키지를 검색해서 설치하시면 됩니다. (자동 업데이트는 써본 적이 없어서 잘 모르겠군요.. ;;)

rpm -qa | grep glibc 등으로 검색해 보시고, rpm 관련 명령어는 man rpm 해서 확인해 보세요..?

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

Leo Park의 이미지

답글 감사드립니다.
rpm -qa | grep glibc을 실행해 보니...

------------------------------------------------
bmk_mgr@ikdp101[107]: rpm -qa | grep glibc
glibc-devel-2.3.4-2
glibc-2.3.4-2
glibc-kernheaders-2.4-9.1.87
glibc-2.3.4-2
glibc-headers-2.3.4-2
glibc-common-2.3.4-2
bmk_mgr@ikdp101[108]:
------------------------------------------------

정상적으로 깔려있는 것 같습니다.
그럼에도 불구하고....컴파일이 안됩니다.

------------------------------------------------
bmk_mgr@ikdp101[108]: gcc -g -m32 test.c -o yastar
/usr/bin/ld: crt1.o: No such file: そのようなファイルやディレクトリはありません
collect2: ld はステータス 1 で終了しました
bmk_mgr@ikdp101[109]:
------------------------------------------------

어떻게 방법이 없을까요?

Dream as if you'll live forever, live as if you'll die tomorrow.

■■■■■■■
http://leo.cbnu.ac.kr/
Dream as if you'll live forever, live as if you'll die tomorrow.

shyblue의 이미지

/usr/lib/gcc///
디렉토리를 참조해 보세요.
보통 64환경에는 -m32를 지원하기 위해서 에서 x86_64와 x86정도 의 디렉토리가 있는게 정상일겁니다.
(예전 기억으로는 그렇습니다.)
현재는 x86_64를 사용하고 있지 않는 관계로 정확하게 말씀드리기는 곤란하지만, -m32옵션이 정상동작하기 위해선, 그런 형태의 디렉토리가 존재해야 하는것은 확실합니다.

gcc --print-libgcc-file-name 으로도 참조 가능할것입니다.

時日也放聲大哭

時日也放聲大哭

Leo Park의 이미지

답글 감사드립니다.
말씀하신대로....
/usr/lib/gcc/아래로 아래와 같은 디렉토리와 화일들이 존재합니다.

-------------------------------------------------
bmk_mgr@ikdp101[119]: cd x86_64-redhat-linux/
bmk_mgr@ikdp101[120]: ls
3.4.3/
bmk_mgr@ikdp101[121]: cd 3.4.3
bmk_mgr@ikdp101[122]: ls
32/ lib-gnu-java-awt-peer-gtk.a libg2c.a libgcj.so@
crtbegin.o lib-gnu-java-awt-peer-gtk.so@ libg2c.so@ libgcj.spec
crtbeginS.o lib-org-w3c-dom.a libgcc.a libgcov.a
crtbeginT.o lib-org-w3c-dom.so@ libgcc_eh.a libstdc++.a
crtend.o lib-org-xml-sax.a libgcc_s.so@ libstdc++.so@
crtendS.o lib-org-xml-sax.so@ libgcc_s_32.so@ libsupc++.a
include/ libfrtbegin.a libgcj.a specs
bmk_mgr@ikdp101[123]: cd 32
bmk_mgr@ikdp101[124]: ls
crtbegin.o lib-gnu-java-awt-peer-gtk.so@ libg2c.a libgcov.a
crtbeginS.o lib-org-w3c-dom.a@ libg2c.so@ libstdc++.a@
crtbeginT.o lib-org-w3c-dom.so@ libgcc.a libstdc++.so@
crtend.o lib-org-xml-sax.a@ libgcc_eh.a libsupc++.a
crtendS.o lib-org-xml-sax.so@ libgcj.a@
lib-gnu-java-awt-peer-gtk.a@ libfrtbegin.a libgcj.so@
bmk_mgr@ikdp101[125]: pwd
/usr/lib/gcc/x86_64-redhat-linux/3.4.3/32
bmk_mgr@ikdp101[126]:

bmk_mgr@ikdp101[136]: gcc --print-libgcc-file-name
/usr/lib/gcc/x86_64-redhat-linux/3.4.3/libgcc.a
bmk_mgr@ikdp101[137]:
-------------------------------------------------

위와 같이 디렉토리가 존재하는데로 컴파일이 안된다면 어떻게 해야할까요....
처음 접하는 일이라서 어떻게 해야할지 전혀 모르고 발만 동동 구르고 있습니다.
그럼, 한번 더 조언 부탁드립니다.

Dream as if you'll live forever, live as if you'll die tomorrow.

■■■■■■■
http://leo.cbnu.ac.kr/
Dream as if you'll live forever, live as if you'll die tomorrow.

shyblue의 이미지

gcc-config 가 있는 환경인지 모르겠습니다.
제가 워낙 gentoo만 오래 사용하다 보니, 다른 리눅스 배포판에서의 환경을 요즘은 알 수가 없네요.
gcc-config가 있다면, gcc-config를 통해서 해결 가능할듯 합니다.
자세한 것은 구글에서 gcc-config로 검색해서 참고하시는 편이 좋을듯합니다.

時日也放聲大哭

時日也放聲大哭

Leo Park의 이미지

답글 감사드립니다.
그런데...ㅜㅜ;;

-------------------------------------------------------
bmk_mgr@ikdp101[16]: gcc-config
gcc-config: コマンドが見つかりません.
bmk_mgr@ikdp101[17]: gcc-config -l
gcc-config: コマンドが見つかりません.
bmk_mgr@ikdp101[18]: gcc -config
gcc: 認識不能なオプション `-config'
gcc: no input files
bmk_mgr@ikdp101[19]:
-------------------------------------------------------

gcc-config 명령어를 찾을수 없다고 나옵니다...
담당자는 소스를 고치는 것보다...컴파일로 해결 가능하면 그렇게 해결하려고 하는데....
어째...쉽지가 않습니다.
이곳저곳 찾아보고...질문도 올렸는데...쉽지가 않습니다.
차라리 이건 안된다는 말이라도 들어서....소스를 고치고 싶은 맘마져 들고 있습니다.

좋은 답글 감사드리고,
혹시 다른 방법이랄까...조언 있으시면 다시 부탁드립니다.
감사합니다.

Dream as if you'll live forever, live as if you'll die tomorrow.

■■■■■■■
http://leo.cbnu.ac.kr/
Dream as if you'll live forever, live as if you'll die tomorrow.

bushi의 이미지

crt1.o 는 gcc 가 사용하는 startup 입니다.

gcc 에 -v 옵션을 붙여서 컴파일해보시면 자세한 로그가 나오는데,
-m64 일 때와 -m32 일 때 경로가 틀릴 겁니다.

-m32 일 때 뒤지는 경로에 crt1.o 가 없는 것 같은데... 이유는 모르겠습니다.
혹시나싶어 centos(아마도 이것을 사용하시는 것 같아서) 쪽에 뭔가 이슈가 된 적이 있나 찾아도 봤는데,
다들 잘 사용하고 계시더군요.

뭔가 추가 패키지가 더 필요한 것 같지는 않은데...
혹시 파일을 삭제하셨다거나 디렉토리를 옮기거나 지워버렸다거나 한 적이 있으신지요.
확인할 겸,
rpm -V gcc
명령으로 검증해보세요. 변경된 것이 없다면 아무련 출력도 나오지 않습니다.

찔러보는 김에, gcc4 가 있나... 한번 실행시켜보세요.

참, LANG=C 로 놓고 에러로그를 잡아주시면 다른 분들이 보기에 편합니다.

OTL

Leo Park의 이미지

안녕하세요.
답글 감사드립니다.

말씀해 주신대로 변경이력과 gcc4를 체크해 보았습니다.
------------------------------------------------
bmk_mgr@ikdp101[148]: echo $LANG
ja_JP.eucJP
bmk_mgr@ikdp101[149]: set LANG=C
bmk_mgr@ikdp101[150]: rpm -V gcc
bmk_mgr@ikdp101[151]: rpm -V gcc4
パッケージ gcc4 はインストールされていません
bmk_mgr@ikdp101[152]:
------------------------------------------------
변경이력은 없는 것으로 나오고,
gcc4는 인스톨 되어 있지 않다고 나옵니다.
LANG=C로 변경하였는데도....계속 일어로 나옵니다. 죄송합니다.

아직 모르는게 많아서...어찌해야할지를 잘 모르겠습니다.
그래도 이번기회에 많이 배우고 있는 듯합니다. 그래도, 결과를 좀 내고 싶은데...맘처럼 쉽지 않습니다.
위와 같은 상황이라면...어떻게 다른 방법이 있을까요?
염치스럽지만 다시 한번 부탁드립니다.
감사합니다.

Dream as if you'll live forever, live as if you'll die tomorrow.

■■■■■■■
http://leo.cbnu.ac.kr/
Dream as if you'll live forever, live as if you'll die tomorrow.

ymir의 이미지

단순한 문제는 아닌듯.. ;;;
gcc 에 -v 옵션을 추가한 후 컴파일 해서, gcc front-end 로 넘어가는 옵션을 찍어 보세요.
그리고 crt1.o 가 어느 경로에 있는지도 확인해 보시구요..

ld configuration 이나 LD_LIBRARY_PATH 등도 관련이 있을지는 모르겠지만..
어쨌거나 ld 에 넘어가는 라이브러리 경로가 잘못되어 있을 수도 있으니.. ;;

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

Leo Park의 이미지

ymir님 감사드립니다.
-v옵션을 추가해서 실행시킨 결과입니다.

-----------------------------------------------
bmk_mgr@ikdp101[153]: gcc -v -m32 -o yastar test.c
/usr/lib/gcc/x86_64-redhat-linux/3.4.3/specs から spec を読み込み中
コンフィグオプション: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-languages=c,c++,objc,java,f77 --enable-java-awt=gtk --host=x86_64-redhat-linux
スレッドモデル: posix
gcc バージョン 3.4.3 20041212 (Red Hat 3.4.3-9.EL4)
/usr/libexec/gcc/x86_64-redhat-linux/3.4.3/cc1 -quiet -v test.c -quiet -dumpbase test.c -m32 -mtune=k8 -auxbase test -version -o /tmp/ccSy8UF7.s
存在しないディレクトリ "/usr/lib/gcc/x86_64-redhat-linux/3.4.3/../../../../x86_64-redhat-linux/include" を無視します
#include "..." の探索はここから始まります:
#include <...> の探索はここから始まります:
/usr/local/include
/usr/lib/gcc/x86_64-redhat-linux/3.4.3/include
/usr/include
探索リストの終わり
GNU C version 3.4.3 20041212 (Red Hat 3.4.3-9.EL4) (x86_64-redhat-linux)
compiled by GNU C version 3.4.3 20041212 (Red Hat 3.4.3-9.EL4).
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
as -V -Qy --32 -o /tmp/ccHsntgf.o /tmp/ccSy8UF7.s
GNU assembler version 2.15.92.0.2 (x86_64-redhat-linux) using BFD version 2.15.92.0.2 20040927
/usr/libexec/gcc/x86_64-redhat-linux/3.4.3/collect2 --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o yastar crt1.o crti.o /usr/lib/gcc/x86_64-redhat-linux/3.4.3/32/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/3.4.3/32 -L/usr/lib/gcc/x86_64-redhat-linux/3.4.3 -L/usr/lib/gcc/x86_64-redhat-linux/3.4.3/32 -L/usr/lib/gcc/x86_64-redhat-linux/3.4.3 -L/usr/lib/gcc/x86_64-redhat-linux/3.4.3/../../../../lib -L/usr/lib/gcc/x86_64-redhat-linux/3.4.3/../../.. -L/lib/../lib -L/usr/lib/../lib /tmp/ccHsntgf.o -lgcc --as-needed -lgcc_s_32 --no-as-needed -lc -lgcc --as-needed -lgcc_s_32 --no-as-needed /usr/lib/gcc/x86_64-redhat-linux/3.4.3/32/crtend.o crtn.o
/usr/bin/ld: crt1.o: No such file: そのようなファイルやディレクトリはありません
collect2: ld はステータス 1 で終了しました
bmk_mgr@ikdp101[154]:
-----------------------------------------------
-m32옵션 실행해서 실패한 결과입니다.

아래는 -m64옵션으로 실행해서 성공한 결과입니다.
-----------------------------------------------
bmk_mgr@ikdp101[162]: gcc -v -m64 -o yastar test.c
/usr/lib/gcc/x86_64-redhat-linux/3.4.3/specs から spec を読み込み中
コンフィグオプション: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-languages=c,c++,objc,java,f77 --enable-java-awt=gtk --host=x86_64-redhat-linux
スレッドモデル: posix
gcc バージョン 3.4.3 20041212 (Red Hat 3.4.3-9.EL4)
/usr/libexec/gcc/x86_64-redhat-linux/3.4.3/cc1 -quiet -v test.c -quiet -dumpbase test.c -m64 -mtune=k8 -auxbase test -version -o /tmp/cc8CdyUl.s
存在しないディレクトリ "/usr/lib/gcc/x86_64-redhat-linux/3.4.3/../../../../x86_64-redhat-linux/include" を無視します
#include "..." の探索はここから始まります:
#include <...> の探索はここから始まります:
/usr/local/include
/usr/lib/gcc/x86_64-redhat-linux/3.4.3/include
/usr/include
探索リストの終わり
GNU C version 3.4.3 20041212 (Red Hat 3.4.3-9.EL4) (x86_64-redhat-linux)
compiled by GNU C version 3.4.3 20041212 (Red Hat 3.4.3-9.EL4).
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
as -V -Qy -o /tmp/cc4usH3z.o /tmp/cc8CdyUl.s
GNU assembler version 2.15.92.0.2 (x86_64-redhat-linux) using BFD version 2.15.92.0.2 20040927
/usr/libexec/gcc/x86_64-redhat-linux/3.4.3/collect2 --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o yastar /usr/lib/gcc/x86_64-redhat-linux/3.4.3/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/3.4.3/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/3.4.3/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/3.4.3 -L/usr/lib/gcc/x86_64-redhat-linux/3.4.3 -L/usr/lib/gcc/x86_64-redhat-linux/3.4.3/../../../../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/3.4.3/../../.. -L/lib/../lib64 -L/usr/lib/../lib64 /tmp/cc4usH3z.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/x86_64-redhat-linux/3.4.3/crtend.o /usr/lib/gcc/x86_64-redhat-linux/3.4.3/../../../../lib64/crtn.o
bmk_mgr@ikdp101[163]: ls
SendMail/ calc/ calc.tar leo* leo64* test.c yastar*
bmk_mgr@ikdp101[164]: yastar
Go 32bit c and cc on 64bit OS!!!
Long int size is 8 bytes long!
bmk_mgr@ikdp101[165]:
-----------------------------------------------
언어를 일어가 아닌 영어로 바꾸고 싶은데...잘 되지 않습니다.
죄송합니다.
아는게 너무 적은 나머지...도무지 감을 못 잡겠습니다.
그래도 많은 분들의 도움으로 하나씩 배우고 있기에 점점 빠져드는 느낌입니다~
위 결과 보시고, 조언 주실것 있다면 부탁드립니다.
감사합니다.

Dream as if you'll live forever, live as if you'll die tomorrow.

■■■■■■■
http://leo.cbnu.ac.kr/
Dream as if you'll live forever, live as if you'll die tomorrow.

ymir의 이미지

일단은 32-bit 링커가 crt1.o 를 현재 디렉토리에서 찾고 있네요..;;
(에러는 이 때문에 나는 것 같군요..)

/usr/libexec/gcc/x86_64-redhat-linux/3.4.3/collect2
 --eh-frame-hdr -m elf_i386 -dynamic-linker
 /lib/ld-linux.so.2 -o yastar crt1.o crti.o

아마도 32-bit 관련 라이브러리에 대한 경로가 설정되어 있지 않은 것 같기는 한데..
(64-bit 장비가 없어서 확인해 볼 수가 없네요... ;;)
ldconfig (/etc/ld.so.conf) 이나 LD_LIBRARY_PATH 를 한번 검토해보세요..

64-bit 컴파일 할 때에는 /usr/lib64/crt1.o 를 참조하는 걸로 봐서..
32-bit 로 컴파일 할 때에는(/usr/lib ??) 에 있는 crt1.o 를 참조하도록 해야 할 것 같네요..

http://www.divms.uiowa.edu/help/linux_help/rh_amd64_faq.html

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

Leo Park의 이미지

ymir님 감사합니다.

아무래도 crt1.o 화일을 찾아서 다시 테스트를 해봐야겠습니다.
그런데, crt1.o 화일을 /usr/lib/에 추가하려면, 어떻게 해야하는지요?
제가 32비트환경에 있는 crt1.o를 ftp접속해서 카피했더니...퍼미션문제로 안 되더라고요.
혹시 이런 경우 방법이 있는건가요?
이번이 리눅스가 처음이라서...모르는거 투성이입니다.
그리고, 32비트OS에 있는 crt1.o화일을 가져다 써도 문제는 없는건가요?

다시한번 도움 감사드립니다.


Dream as if you'll live forever, live as if you'll die tomorrow.

■■■■■■■
http://leo.cbnu.ac.kr/
Dream as if you'll live forever, live as if you'll die tomorrow.

김정균의 이미지

좀 다른 견해이지만.. 해당 바이너리가 동일한 배포본 버전인데 i386 / x86_64 이 차이만 있는 것이라면.. 즉

CentOS 4.6 i386
CentOS 4.6 x86_64

이런 환경에서 i386 binary 를 x86_64 에서 돌리고 싶다는 의미라면.. 그냥 x86_64 에서 구동 시킬 수 있습니다. aaa 에서 link 하고 있는 32bit library 들만 설치 되어 있다면 말이죠. 더 쉽게 compile 하려고 노력하지 않으셔도 된다는 의미입니다.

우리 회사에서도.. 동일한 배포본 버전 (CentOS 4.5) 환경에서 x86 machine 에서 빌드한 apache 를 x86_64 machine 의 64bit OS 에서 빌드 없이 그냥 돌리고 있습니다. 즉 64bit OS 에서 32bit binary 를 작동 시키고 있다는 얘기죠.

Leo Park의 이미지

안녕하세요, 답글 감사드립니다.
저도 그렇게는 하여 정상적으로 실행되는 것을 확인 하였습니다.
그러나, 담당자는 어떤 이유에서인지...64비트환경에서 32비트로 컴파일하여 실행하기를 원하고 있습니다.
그래서, 지금은 /usr/lib/에 crt1.o화일을 만들어서...테스트 해 볼려고 합니다.
좋은 답변 감사드리고, 즐거운 주말 되세요~

Dream as if you'll live forever, live as if you'll die tomorrow.

■■■■■■■
http://leo.cbnu.ac.kr/
Dream as if you'll live forever, live as if you'll die tomorrow.

김정균의 이미지

신기하신 분이군요. 특히 갑이라면.. 더 암울한 환경이겠습니다.

도대체 무슨 차이가 있다고 --; 차이가 없다는 것을 논리적으로 설명을 드릴 수는 없을까요? ^^;

Leo Park의 이미지

답글 감사드립니다.
그러게나 말입니다. 신기하고 호기심 많은 갑 덕분에...
제가 아는게 많으면...이건 안된다..라고 말하고 싶은데...
제가 아는바가 없어서-_-;;
몸으로만 때우고 있습니다.
이번에 기필코 열심히 배워서...다음부터는 이런 일 생기지 않도록 해야겠습니다.
그럼,즐거운 하루되세요~

Dream as if you'll live forever, live as if you'll die tomorrow.

■■■■■■■
http://leo.cbnu.ac.kr/
Dream as if you'll live forever, live as if you'll die tomorrow.

wkpark의 이미지

음..

일전에 ifort가 32비트만 지원하던 적이 있었죠. 그때 64비트 머신에서 ifort 32비트만이 컴파일 할 수 있고 실행가능하던 때가 있었습니다. (불과 몇년전이며, 현재는 ifort가 64비트도 아주 잘 지원하고 있죠.)

그덕분에.. 많은 라이브러리를 32비트로 설치하고, 컴파일도 32비트로 컴파일하고 했던 삽질이 기억나네요.

(담당자가 왜 그런 삽질을 요구하는지 한번 물어보심이..)

crt1.o 파일은 gcc 32비트용 rpm을 받아서 rpm2cpio | cpio -id 와 같은 명령으로 풀면 따로 설치하실 수 있을겁니다. libgcc.a(?) 등등도 32비트로 맞춰야 하는지 확인해 보시고요.. gcc32와 같은 이름으로 스크립트를 만들고 gcc-32비트용은 경로를 다르게 해서 설치하시는 방법도 있구요... (gcc옵션에 libgcc 등등의 라이브러리 패스 및 include파일 경로 잡아주는 옵션을 잘 설정하면) 64비트 gcc와 같이 사용하실 수 있을겁니다.

온갖 참된 삶은 만남이다 --Martin Buber

Leo Park의 이미지

답글 감사드립니다.
제가 지금 하고 일과 비슷하네요.
저는 라이브러리는ㄴ 64비트에 설치하고, 컴파일은 64비트에서 32비트로 컴파일하기입니다.
현재로써는 소스를 수정하는 것보다...컴파일을 통해서 하는게 더 빠를것이라고 이러고 있습니다.
제가 아는게 좀 많으면 일 쉬울것도 같은데....
컴파일하는 것만도 쉽지가 않습니다.

crt1.o 파일 설치방법..감사드립니다.
이것도 어떻게 해야하나 여기저기 찾아보았는데...아직 못 찾고 있었거든요~
감사드립니다. 그럼, 즐거운 하루 되세요.

Dream as if you'll live forever, live as if you'll die tomorrow.

■■■■■■■
http://leo.cbnu.ac.kr/
Dream as if you'll live forever, live as if you'll die tomorrow.

익명 사용자의 이미지

64bit 시스템에서 때때로 32bit 시스템 빌드해서 사용하는 사람입니다. 제일 간단한(?) 방법은 32bit chroot 환경을 하나 만들어서 거기서 빌드하는 겁니다. 64bit시스템에서는 32bit compatibility 패키지(우분투의경우)만 설치하면 별 불편함없이 사용할 수 있을 겁니다.

Leo Park의 이미지

답글 감사드립니다.
32bit compatibility 패키지란 어떤걸 말씀하시는 건지? 그리고 설치방법은 어떻게 되는지?
알려주실수 있으시다면 부탁드립니다.
그럼,즐거운 하루 되세요~

Dream as if you'll live forever, live as if you'll die tomorrow.

■■■■■■■
http://leo.cbnu.ac.kr/
Dream as if you'll live forever, live as if you'll die tomorrow.

cppig1995의 이미지

오홋! 저도 Windows상의 gcc에서 같은 현상을 겪고 있습니다.
'같은'은 아니고 '정반대'입니다.

Ubuntu (Feisty) 64: gcc -m64 잘 컴파일됨.
Windows Vista 32: gcc -m64에서 구현되지 않았다(not implemented) 오류.
Windows Server 2008 64: gcc -m64에서 구현되지 않았다 오류.

이건 어떻게 하나요?
저는 운영체제를 개발하고 있으며, 다음과 같은 과정을 통해 제작합니다.

1. 어셈블리 파일(Intel/NASM 문법): yasm을 통해 어셈블
2. C 파일: gcc -S -m64로 컴파일
3. (2)에서 나온 어셈블리 파일(AT&T/gas 문법): yasm을 통해 어셈블

Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.

Leo Park의 이미지

답변 주시고, 관심 갖아주신 분들께 감사드립니다.
덕분에..오늘 crt1.o 화일을 설치하고
임시로 만든 작은 테스트화일로 64비트에서 32비트로 컴파일에 성공하였습니다.
내일부터는 본 소스로 진행할 예정입니다.
부디 잘 되었으면 좋겠고....혹시나 다시 막히거나, 어려운일 생기면 도움 요청하도록 하겠습니다.
그럼, 다들 2008년 좋은 일 가득하시길 바라겠습니다.

■■■■■■■■■■■■■■■■■■■■■■■
http://leo.cbnu.ac.kr/
Dream as if you'll live forever, live as if you'll die tomorrow.

■■■■■■■
http://leo.cbnu.ac.kr/
Dream as if you'll live forever, live as if you'll die tomorrow.

뒤늦의 이미지

gcc -o file file.c -z execstack -fno-builtin -mpreferred-stack-boundary=2 -m32 이렇게 하시면 단박에 되셧을건데

ㅎㄷㄷㄷ의 이미지

64비트OS에서 32비트로 돌아가게 하는게 저의 목적입니다. 이라면 걍 64비트로 빌드해서 사용하면 되는 것을....
왜 x86_64 겠어요?

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.