본문 바로가기

6. With IT/6.2 NDK

extern사용 예(리눅스환경)


리눅스의 컴파일러에는 gcc와 g++ 이라는 바이너리가 있다.

이들은 모두 /usr/bin 디렉토리에 위치하고 있다.
이들의 차이점은 여러가지가 있지만, 먼저 확장자를 가지고 소스의 종류를 판단한다는 것이다.
같은 소스라도 확장자를 *.c로 할때는 gcc를 *.cpp로 할 때는 g++를 사용해야 한다.
아래와 같은 extern 함수를 테스트해보자.
gcc로 모두 빌드하기 위해서 확장자를 모두 *.c로 만들었다.
timeprint.c
-----------------
#include <time.h>
void log(int level, char *message)
{
time_t tmp_time = time(NULL);
char *tmp_ctime = ctime(&tmp_time);
tmp_ctime[strlen(tmp_ctime) - 1] = '';
printf("%s ", tmp_ctime);
printf(message);
return;
}
이 함수에서 사용한 log() 라는 함수를 다른 c소스에서(htp.c) extern으로 선언하여 사용해보겠다.
사실 log() 함수는 system 함수 중에서 math.h 에 들어있는 함수인데 여기서는 다른 의미로 사용해 본것이다.
htp.h
----------------
extern void log(int level, char *message);
htp.c
----------------
#include "htp.h"
int main()
{
log(0,"time flow");
}
[compile 순서]
1. gcc -c timeprint.c
2. gcc -c htp.c
3. 위의 1,2를 실행하여 생성된 오브젝트파일(timeprint.o, htp.o)을 가지고 실행파일을 만든다.
4. gcc timeprint.o htp.o -o htp_test
5. ./htp_test 를 실행해서 제대로 되었는지 확인한다.