내가 가진메이크 여러 정의 오류 내 메이크에서
readline: readline.h readline.c
gcc -c -o readline readline.c
car: car.c car.h readline.h
gcc -c -o car car.c
dealer.o: dealer.c car.h
gcc -c -o dealer dealer.c
dealer: car.o dealer.o readline.o
gcc car.o dealer.o readline.o
이 readline.h 내 교수가 우리에게 준 문자열에 읽는 기능의 프로토 타입을 포함, readline.c는 함수가, car.c이 구조체에 포함되어있다 자동차 정보 및 연결된 목록에서 작동하는 다양한 기능을 제공하는 dealer.c는 주요 기능이있는 곳입니다.
이것은 메이크 파일을 처음 사용 한 것이지만 특정 기능의 다중 정의에 대한 내용을 이해하는 데 어려움을 겪는 다양한 오류가 발생했습니다. (일부는 실제로 코드에, 일부는 시스템 코드에 깊숙이 맞춰져 있습니다.) 왜 내가이 오류가 발생하는지 모르겠다.
제 목표는 모든 구성 요소를 연결하여 기본 프로그램을 만드는 것입니다.
오류 :
gcc car.o dealer.o readline.o
dealer.o: In function `_start':
(.text+0x0): multiple definition of `_start'
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../lib64/crt1.o:(.text+0x0): first defined here
dealer.o: In function `printList':
(.text+0x4ee): multiple definition of `printList'
car.o:car.c:(.text+0x33a): first defined here
dealer.o: In function `_fini':
(.fini+0x0): multiple definition of `_fini'
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../lib64/crti.o:(.fini+0x0): first defined here
dealer.o:(.rodata+0x0): multiple definition of `_IO_stdin_used'
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../lib64/crt1.o:(.rodata.cst4+0x0): first defined here
dealer.o: In function `__data_start':
(.data+0x0): multiple definition of `__data_start'
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../lib64/crt1.o:(.data+0x0): first defined here
dealer.o:(.rodata+0x8): multiple definition of `__dso_handle'
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/crtbegin.o:(.rodata+0x0): first defined here
dealer.o: In function `clearList':
(.text+0x5e2): multiple definition of `clearList'
car.o:car.c:(.text+0x42e): first defined here
dealer.o: In function `append_to_list':
(.text+0x1b4): multiple definition of `append_to_list'
car.o:car.c:(.text+0x0): first defined here
dealer.o: In function `find_car':
(.text+0x3db): multiple definition of `find_car'
car.o:car.c:(.text+0x227): first defined here
dealer.o: In function `_init':
(.init+0x0): multiple definition of `_init'
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../lib64/crti.o:(.init+0x0): first defined here
readline.o: In function `readLine':
readline.c:(.text+0x0): multiple definition of `readLine'
dealer.o:(.text+0x620): first defined here
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/crtend.o:(.dtors+0x0): multiple definition of `__DTOR_END__'
dealer.o:(.dtors+0x8): first defined here
/usr/bin/ld: error in dealer.o(.eh_frame); no .eh_frame_hdr table will be created.
collect2: ld returned 1 exit status
make: *** [dealer] Error 1
나는 그들이 할 생각 무엇 메이크가 있고 이해하지만이 작업을 얻을 수가 캔트.
gcc -c와 -o는 함께 이해하지 못합니다. -c를 사용하여 .c 파일을 오브젝트 .o 파일로 컴파일하도록 gcc에 지시하십시오. -o는 여러 객체 파일을 실행 파일에 * 링크 *하는 데 사용됩니다. gcc는 여기 혼란스럽고 각 파일을 자신의 실행 파일에 링크하려고합니다. –
'readline :'을'readline.o :'로,'-o readline'을'-o readline.o' 등으로 변경하십시오. –
@LeeDanielCrocker가 틀립니다. '-o '는 출력 파일 이름을 지정하는 것을 의미합니다. '-c'와'-o'를 함께 사용하는 것이 일반적입니다. 'gcc -o foo.obj -c foo.c' –