CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ CnUnix ] in KIDS
글 쓴 이(By): powell (이상권)
날 짜 (Date): 2002년 3월 18일 월요일 오후 09시 33분 15초
제 목(Title): [Q] C++ 라이브러리와 C 프로그램을 링크하


안녕하세요.
C++와 C 사이의 링크에 대해서 질문이 있습니다.
예를 들어, 다음과 같이 C++로 작성된 라이브러리가 있다고 할때,

/* sum.C */
/* C++ library implementation */

class Sum_t
{
  int A;
  int B;

public: 

  int SetA(int a) { A = a; }
  int SetB(int b) { B = b; }
  int GetSum()    { return A+B; }
};

int GetSum(int a, int b)
{
  Sum_t sum;

  sum.SetA(a);
  sum.SetB(b);
  return sum.GetSum();
}

여기서, int GetSum(int a, int b) 함수를 C 프로그램에서 호출해서
사용하고 싶습니다. 그래서, 아래와 같이 GetSum() 함수 프로토타입을
헤더로 정의 하였습니다.

/* sum.h */

int GetSum(int a, int b);

이런후, 아래와 같이 C 프로그램 내에서 사용했습니다.

/* main.c */
/* traditional C code */

#include <stdio.h>

void main()
{
  int a, b, sum;

  a = 10;
  b = 20;
  sum = GetSum(a, b);
  printf("%d+%d=%d\n", a, b, sum);
}

sum.C는 g++로 compile하였고, main.c는 gcc로 compile했습니다.
근데, 이 둘을 gcc를 이용해서 링크하니 
undefined reference to `GetSum' 이라는 링크에러가 발생합니다.
이 에러가 나는 것은 이해할 수 있습니다. 
함수 naming convention이 틀리기 때문이죠...

여기서, 질문!

만약 이런 경우처럼, C++ 라이브러리가 존재하고,
이 라이브러리를 C 프로그램에서 사용하고 싶을 때, 어떻게 해야하나요? 
즉, 어떻게 하면 위의 예와 같은 링크에러를 없앨 수 있을까요?

가장 손 쉬운(?) 방법은 main.c를 g++로 compile한 후, g++로 링크시키면 
됩니다.
하지만, 이렇게 하면 문제가 main.c가 C++ convention을 안 따르기 때문에
많은 compile error가 발생합니다. 
물론 이 예에서는 고칠게 없지만, 일반적인 C 프로그램이라면 고칠게 많겠죠...
이렇게 하지 않고, C 인채 그대로 두고 잘 링크시킬 방법이 없을까요?

도사님들, 도와 주세요...
그럼, 미리 감사합니다.

[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.