| [ 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 인채 그대로 두고 잘 링크시킬 방법이 없을까요? 도사님들, 도와 주세요... 그럼, 미리 감사합니다. |