include 관련 질문입니다.

하하의 이미지

링크 에러입니다.

무엇이 문제인가요?

1.h

#ifndef HA
#define HA

int a();


#endif

2.h

#ifndef HB
#define HB

int b();


#endif

main.c

#include "1.h"
#include "2.h"

main()
{
        a();
        b();
}

int a(){
        printf(" a 다 ");
}

2.c

#include "2.h"

int b()
{
        printf(" b다");
}

Makefile

CC = gcc
AR = ar
GWLIB = 1lib.a

PROGRAM = test


OBJS = 2.o


.c.o:
        $(CC) -c $<


all: $(PROGRAM)


$(GWLIB): $(OBJS)
        @$(AR) -r $(GWLIB) $?


$(PROGRAM): $(GWLIB) main.o
        $(CC) $(GWLIB) -o $(PROGRAM) main.o 



clean:
        /bin/rm -f *.o $(GWLIB) $(PROGRAM)

make 하면

main.o: In function `main':
main.o(.text+0xc): undefined reference to `b'
collect2: ld returned 1 exit status
make: *** [test] 오류 1

- - ;;

이런것도 몰라 라고 하실거 같은데..

정말로 모르겠습니다. - - ;;

main.c 를 보면 a와 b함수를 사용하는데.

a는 main.c 안에서 정의 하였고 1.h에서 선언

b는 2.c 안에서 정의 하였고 2.h에서 선언.

main.c 는 include "a.h" , include "b.h"

이렇게 하면 되지 않는데?/

무엇가 중대한 착각을 하고 있는거 같습니다.

그럼 즐거운 하루 되세요... ^______^;;;;;;;

monpetit의 이미지

gcc 의 라이브러리는 접두사 + 이름 + 확장자 의 규칙이 있습니다.
라이브러리의 이름이 abc 라고 한다면 그 파일 이름은 libabc.a 입니다.
lib + 이름 + .a의 구성이죠.
그러므로 1lib.a 같은 이름은 gcc가 사용하기에 적당하지 않습니다.(물론 안 되는 건 아니지만...)
그리고 이 abc 라는 라이브러리, 즉 libabc.a 를 사용하여 링크할 때에는 이름 부분만 따로 분리해서 사용합니다.
$(CC) -o $(PROGRAM) main.o -labc -L.
사용법은 "-l라이브러리명(abc)"입니다. 맨 뒤에 붙은 "-L디렉토리"는 라이브러리가 존재하는 디렉토리입니다. /usr/lib, /usr/local/lib 등이 아닌 경우엔 명시적으로 적어주어야 합니다.
자세한 것은 info gcc 하세요.

댓글 달기

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