본문 바로가기

Programing/Node.js

An Introduction to libuv

주소: http://nikhilm.github.io/uvbook/


우선 예제를 돌리기 전에 git으로 소스코드를 빌드해서 시스템에 설치를 한다.

자세한 내용은 전에 포스팅한 libuv를 참고

아래 명령처럼 libuv.a 파일이 /usr/local/lib/에 있어야 한다.

$ ls /usr/local/lib/libuv.a

/usr/local/lib/libuv.a


첫 번째 예제 - http://nikhilm.github.io/uvbook/basics.html#hello-world

소스코드

#include <stdio.h>
#include <uv.h>

int main() {
    uv_loop_t *loop = uv_loop_new();

    printf("Now quitting.\n");
    uv_run(loop, UV_RUN_DEFAULT);

    return 0;
}

새 uv.h에서는 uv_loop_new 대신에 uv_loop_init를 사용하라고 적혀있다. 0.12버전 이후에 제거된다고 한다.

/*

 * Allocates and initializes a new loop.

 * NOTE: This function is DEPRECATED (to be removed after 0.12), users should

 * allocate the loop manually and use uv_loop_init instead.

 */

UV_EXTERN uv_loop_t* uv_loop_new(void);


따라서 이 예제는 다음과 같이 수정되어야 한다.

#include <stdio.h> #include <uv.h> int main() { uv_loop_t loop;

uv_loop_init(&loop); printf("Now quitting.\n"); uv_run(&loop, UV_RUN_DEFAULT); return 0; }

빌드가 안되는 경우에는?

다음과 같이 에러가 나는 경우가 있다.

~/Desktop/uvbook/code/helloworld$ gcc main.c

/tmp/cc9WCGsn.o: In function `main':

main.c:(.text+0x9): undefined reference to `uv_loop_new'

main.c:(.text+0x28): undefined reference to `uv_run'

collect2: ld returned 1 exit status

undefined reference의 경우에는 libuv.a를 지정하지 않아서 그렇다.


$ gcc main.c /usr/local/lib/libuv.a 와 같이 했는데도 에러가 난다고요?

이 경우는 librt.so도 링크를 해야 한다. 이것에 대해서는 stackoverlow를 참고하라

gcc main.c /usr/local/lib/libuv.a -lrt

a.out 대신 이름을 지정하고 싶다면 아래와 같이 한다.

gcc -o hello main.c /usr/local/lib/libuv.a -lrt


Makefile로 만든다면 아래와 같다. Makefile

main: main.c

gcc -o hello main.c /usr/local/lib/libuv.a -lrt

clean:

rm hello