또 한 번 허접한 gcc에 관한....

익명 사용자의 이미지

밑의 답변 주셔서 감사하구요...꾸벅~
.s 만드는 건 성공했습니다.
근데 또 막히는게 있어서 ㅠ_ㅠ
.s 파일을 as라는 어셈블러를 사용해서 .o 파일로 변환시켜야 되는데...
밤새 삽질을 했지만... .out이란 파일로 밖에 변환이 안되네요
제가 지금 쓰고 있는 환경이 리눅스를 정식으로 설치한게 아니고
시그너스 깔아서 연습하고 있는데... 그것땜에 그런지 저 .out파일은
실행이 안되네요 리눅스에서 저게 실행화일인거 같던데...
as로 .s를 .o로 변환하는게 가능한지 알고 싶고요.. 가능하다면어케하는지
그리고 만들어진 .o를 ld를 써서 어떻게 실행화일로 링크시키는지
알고 싶습니다.
ld hanoi.o를 치니깐 너무 당연한진 모르겠지만
printf , __main이 undefined 되어있다고 나오네요
근데 왜 scanf는 안나오는 걸까요? 후...궁금한건 많은데 답답하네요....
참고로 소스는
#include

void hanoi_move(int a, int n, int b)
{
if(n==1) {
printf("move %d to %d\n", a, b);
return;
}
hanoi_move(a, n-1, 6-a-b);
printf("move %d to %d\n", a, b);
hanoi_move(6-a-b, n-1, b);
}

main()
{
hanoi_move(1, 4, 3);
}
입니다. 고수분들의 조언 부탁드리고 주말 잘 보내세요~
그럼 이만..

익명 사용자의 이미지

gcc는 무척 똑똑한 전단...그 머시라 합니다만,, 다 알아서 해줍니다.
gcc가 알아 먹는 종류는 엄청 많은데요. .s도 알아먹습니다.
그냥 gcc 하면 되고, 그것이 컴파일단계까지만 진행될려면.
gcc -c myfile.s
myfile.o 만들어 집니다.
cygwin 쓴다면서 그게 a.out 이 나옵디여? a.exe 아니고요?
옷.. as로 그냥 하니 a.out 이?
호호.. a.out 도 그냥 gcc a.out 하면 a.exe 나오는군
gcc를 쓰세요. a.exe 나옵니다. gcc yourfile.o
똑똑한 gcc를 불러주세요

걸음마 wrote..
밑의 답변 주셔서 감사하구요...꾸벅~
.s 만드는 건 성공했습니다.
근데 또 막히는게 있어서 ㅠ_ㅠ
.s 파일을 as라는 어셈블러를 사용해서 .o 파일로 변환시켜야 되는데...
밤새 삽질을 했지만... .out이란 파일로 밖에 변환이 안되네요
제가 지금 쓰고 있는 환경이 리눅스를 정식으로 설치한게 아니고
시그너스 깔아서 연습하고 있는데... 그것땜에 그런지 저 .out파일은
실행이 안되네요 리눅스에서 저게 실행화일인거 같던데...
as로 .s를 .o로 변환하는게 가능한지 알고 싶고요.. 가능하다면어케하 는 지
그리고 만들어진 .o를 ld를 써서 어떻게 실행화일로 링크시키는지
알고 싶습니다.
ld hanoi.o를 치니깐 너무 당연한진 모르겠지만
printf , __main이 undefined 되어있다고 나오네요
근데 왜 scanf는 안나오는 걸까요? 후...궁금한건 많은데 답답하네 요....
참고로 소스는
#include <stdio.h>

void hanoi_move(int a, int n, int b)
{
if(n==1) {
printf("move %d to %d\n", a, b);
return;
}
hanoi_move(a, n-1, 6-a-b);
printf("move %d to %d\n", a, b);
hanoi_move(6-a-b, n-1, b);
}

main()
{
hanoi_move(1, 4, 3);
}
입니다. 고수분들의 조언 부탁드리고 주말 잘 보내세요~
그럼 이만..

익명 사용자의 이미지

답변주신 '주팔'님께 다시 한 번 감사드리구여 ^^
as hanoi.s 하면 분명히 exe가 아니고 out화일이 나오거든요
실행은 물론 안되구요.....
제가 지금 할려는건 모든 과정을 다 거쳐서 실행화일을 만드는거라서...
좀더 정확히 말씀드리겠습니다. ^^
우선 hanoi.cpp--->by preprocessing --->hanoi.cpp--->by cpp compiler?
--->hanoi.c--->by gcc -S --->hanoi.s--->by as -?--->hanoi.o
--->by ld -? --->hanoi.exe
위 과정에서 제가 물음표를 한 부분이 제가 지금 모르는 부분이고요 ^^
선생님(교수님)이 말씀하시기는 씨피피소스는 결국 지씨씨에서 씨소스로
바꾼 다음에 컴파일하는거라고 하시네요....
그래서 씨피피를 먼저 씨소스로 바꾼 후에 나머지 과정을 수행해보라는데
솔직히 g++로 그냥 컴파일하면 실행화일 만드는 건 어렵지 않은데...
저 과정을 다 거칠려니깐 중간중간에 어떤 옵션과 명령들이 쓰여야하는지
잘 모르겠네요...씨피피소스를 씨소스로 바꾼다는데 아무리해도 씨피피소
스는 결국 그냥 씨피피소스밖에 안나오구......답답하네요....
계속 질문드려서 정말 죄송합니다..

익명 사용자의 이미지

간단한거 하나 만들어서. 실제로 어떤 식으로 일어나는지 보면 도움이 될 것입니다.

gcc 머시머시.c --verbose

Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/2.96/specs
gcc version 2.96 20000731 (Red Hat Linux 7.1 2.96-85)

프리프로세싱합니다. gcc -E
/usr/lib/gcc-lib/i386-redhat-linux/2.96/cpp0 -lang-c -v -D__GNUC__=2 -D__GNUC_MINOR__=96 -
D__GNUC_PATCHLEVEL__=0 -D__ELF__ -Dunix -Dlinux -D__ELF__ -D__unix__ -D__linux__ -D__unix -
D__linux -Asystem(posix) -D__NO_INLINE__ -Acpu(i386) -Amachine(i386) -Di386 -D__i386 -
D__i386__ -D__tune_i386__ t.c /tmp/cc1S9xAW.i
GNU CPP version 2.96 20000731 (Red Hat Linux 7.1 2.96-85) (cpplib) (i386 Linux/ELF)
ignoring nonexistent directory "/usr/local/include"
ignoring nonexistent directory "/usr/i386-redhat-linux/include"
#include "..." search starts here
#include <...> search starts here
/usr/lib/gcc-lib/i386-redhat-linux/2.96/include
/usr/include
End of search list.

어셈블리 소스코드 만듭니다. gcc -S
/usr/lib/gcc-lib/i386-redhat-linux/2.96/cc1 /tmp/cc1S9xAW.i -quiet -dumpbase t.c -version -
o /tmp/cc8pXuNI.s
GNU C version 2.96 20000731 (Red Hat Linux 7.1 2.96-85) (i386-redhat-linux) compiled by GNU C
version 2.96 20000731 (Red Hat Linux 7.1 2.96-85).

기계어로 변환합니다. gcc -c
as -V -Qy -o /tmp/ccJuaKVz.o /tmp/cc8pXuNI.s

링크합니다. ld 뭐시뭐시뭐시
이거저거 패스넣고 목적파일 지정하고 아웃형태지정하고 우째우째 하면 실행파일로 바꿔집니다.
GNU assembler version 2.10.91 (i386-redhat-linux) using BFD version 2.10.91.0.2
/usr/lib/gcc-lib/i386-redhat-linux/2.96/collect2 -m elf_i386 -dynamic-linker /lib/ld-
linux.so.2 /usr/lib/gcc-lib/i386-redhat-linux/2.96/../../../crt1.o /usr/lib/gcc-lib/i386-
redhat-linux/2.96/../../../crti.o /usr/lib/gcc-lib/i386-redhat-linux/2.96/crtbegin.o -
L/usr/lib/gcc-lib/i386-redhat-linux/2.96 -L/usr/lib/gcc-lib/i386-redhat-
linux/2.96/../../.. /tmp/ccJuaKVz.o -lgcc -lc -lgcc /usr/lib/gcc-lib/i386-redhat-
linux/2.96/crtend.o /usr/lib/gcc-lib/i386-redhat-linux/2.96/../../../crtn.o

걸음마 wrote..
답변주신 '주팔'님께 다시 한 번 감사드리구여 ^^
as hanoi.s 하면 분명히 exe가 아니고 out화일이 나오거든요
실행은 물론 안되구요.....
제가 지금 할려는건 모든 과정을 다 거쳐서 실행화일을 만드는거라서...
좀더 정확히 말씀드리겠습니다. ^^
우선 hanoi.cpp--->by preprocessing --->hanoi.cpp--->by cpp compiler?
--->hanoi.c--->by gcc -S --->hanoi.s--->by as -?--->hanoi.o
--->by ld -? --->hanoi.exe
위 과정에서 제가 물음표를 한 부분이 제가 지금 모르는 부분이고요 ^^
선생님(교수님)이 말씀하시기는 씨피피소스는 결국 지씨씨에서 씨소스로
바꾼 다음에 컴파일하는거라고 하시네요....
그래서 씨피피를 먼저 씨소스로 바꾼 후에 나머지 과정을 수행해보라는데
솔직히 g++로 그냥 컴파일하면 실행화일 만드는 건 어렵지 않은데...
저 과정을 다 거칠려니깐 중간중간에 어떤 옵션과 명령들이 쓰여야하는지
잘 모르겠네요...씨피피소스를 씨소스로 바꾼다는데 아무리해도 씨피피소
스는 결국 그냥 씨피피소스밖에 안나오구......답답하네요....
계속 질문드려서 정말 죄송합니다..

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.