공유 라이브러리 작성시 C, C++ 혼합에 대한 질문입니다.
글쓴이: mirinae312 / 작성시간: 일, 2008/03/16 - 11:40오후
안녕하세요.
공유라이브러리 관련 개발을 하고 있습니다.
C++로 작성한 부분을 C언어 형태의 API로 접근하도록 해놓았는데요.
라이브러리 함수가 호출이 되지 않는 것 같아서 혹시 두 언어간의 호환성 및 컴파일 옵션 때문인가 해서요..
전체적인 구조는
// ext_api.h
extern void f();
// api.h
void f()
{
// log.txt 로그파일 작성
FILE* fp = fopen("./log.txt", "w");
fprintf(fp, "in function F");
fclose(fp);
aCls a; // class 생성
a.do()
}
로 되어 있습니다.
클래스 안에는 stl을 사용해서 데이터 처리를 했고요..
이렇게 만든 라이브러리를 다른 곳에서 호출하는데요...
실행을 해보면 log.txt 파일자체가 생기지 않는 것으로 보아... 라이브러리 함수f가 아예 호출 되지 않는 것 같습니다.
일반 c언어로 작성한 공유 라이브러리는 문제가 없습니다.. 그래서 언어차이로 밖에 생각이 안되네요..
개발한 모듈은 apache에 물려서 사용하고 있습니다.
실행에 보면 error 12152가 뜨네요...
혹시 해결책을 알고 계신분이 있다면 알려주시면 감사하겠습니다.
부탁드려요..
그럼 좋은 한주 시작하세요.~
Forums:
혼합해도 문제는 없습니다.
저도 C/C++ 혼합해서 사용하고 있는데요.
사용시에 별다른 문제가 없었는데요. (.h파일을 사용하는 파일의 확장자는 .cpp 또는 .cc가 맞죠?)
fprintf(fp, "in function F");
대신에
fprintf(stderr, "in function F");
로 바꿔서 테스트를 보심이 어떨런지...
extern "C" 로 해야 하지
extern "C" 로 해야 하지 않나요?
extern "C"는 c++
extern "C"는 c++ 컴파일러에게 심볼네이빙을 c언어와 같은 방식으로 해달라고 하는 의미입니다.
만약에 extern "C"를 하지 않으면 링크타임에 심볼을 찾을수 없다며 바이너리 자체가 안만들어집니다.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
댓글 달기