Language

    jni lib를 static block에서 로드하는 이유

    java에서 c/c++ 코드를 사용하기 위해 jni를 사용하게 되는데 이때 java 코드에서 라이브러리 로드시에 static { System.loadLibrary("라이브러리 이름");} 으로 많이 사용하게 되는데, 그 이유는 만약 라이브러리가 로드되지 않는 상태에서 함수 호출시 오류가 발생할 수 있다. 함수 호출 시점보다 먼저 C 라이브러리 로드하기 위해 static block사용하게 일반적이다.

    jni so파일 링크

    gcc -shared -fPIC -o libhellojni.so hellojni.c -I/usr/lib/jvm/java-6-openjdk-amd64/include/ -I/usr/lib/jvm/java-6-openjdk-amd64/include/linux/ gcc -shared -fPIC -o "so파일명" "c파일명" -I/usr/lib/jvm/java-6-openjdk-amd64/include/ -I/usr/lib/jvm/java-6-openjdk-amd64/include/linux/

    TCP/IP 소켓 통신

    서버와 클라이언트 프로그램 작동및 진행순서 1. 서버가 소켓을 생성하고 연결을 기다린다. 2. 클라이언트에서서버의 소켓에 연결한다. 3. 클라이언트에서 데이터를 전송한다. 4. 서버에서 데이터를 받아서 화면에 출력한다. 5. 서버와 클라이언트의 소켓연결을 끊는다. 프로그램은 2개를 작성한다. 당연히 서버와 클라이언트이다. 각각 SocketServer.java , SocketClient.java로한다 파일은 우측위 누르셈 명령 프롬프트를 2개 띄운후에 javac SocketServer.java javac SocketClient.java를 각각 컴파일해준다. 하나의 콘솔에서 서버를 먼저 실행시킵니다. 파라미터로포트값을 주는데, 주지않으면 5777번이 잡히게 된다. 포트번호는 보통 3000번 이상의 값을 주는..

    NullPointerExceoption

    NullPointerException이 생기는 이유는, 어떤 변수나 객체의 값이 없거나, 생성되지 않았는데, 그것을 이용하려고 할 때 발생한다. 코드(Logic)상의 문제가 아니기 때문에 Compile time에는 error가 발생되지 않고, 실제로 프로그램을 실행할 때(Run time) error가 난다. request로 값을 받는다면 그 값들이 제대로 넘어오는지, 변수를 사용해서 메소드를 호출 한다면 해당 변수에 값이 제대로 들어있는지 확인해봐야한다.

    구조체 메모리 패딩 문제

    typedef struct Test { char a; short b; int c; }T T A; printf("%d", sizeof(A)); 어떤 값이 출력 될까? 32bit OS에서 가정하면 char 는 1Byte short 는 2Byte int 는 4Byte로 총 7이 출력될 것 인가? 하지만 출력 값은 8이다. 구조체에서는 메모리의 크기를 4Byte씩 나눠서 저장하게 됩니다. 위의 예제에서 char형과 short형을 합치면 3바이트이므로 4바이트를 맞추기 위해 1바이트가 추가 된다. 즉 (char(1) + short(2) + 1) + int(4) 로 총 8바이트 로 저장됩니다. 이것이 바로 메모리 패딩 입니다.

    전처리기

    전처리기란 프로그램에서 컴파일 전에 가장 먼저 처리되는 것이라고 보면 된다. 그 중 잘 알지 못하고 있는 것 들에 대해 설명한다. 1. #pragma once - 포함된 헤더 파일들이 여러개의 소스파일에 동시에 include 되어있을 시 중복되어 충돌할 경우가 발생할 수 있다. 그때 포함된 헤더 파일들이 한번씩만 빌드 되게 설정하는 것이다. 즉 중복을 방지한다. 2. #pragma comment(lib, "*.lib") - 외부 라이브러리 링크를 코드 내에 명시할 때 사용한다. Visual Studio와 같은 통합 개발 한경이 아니더라도, Open CV나 여러 라이브러리를 코드 내에서 링크 하여 사용 가능하도록 한다. 3. #define 내부의 # - #define 전처리기 지시자는 모두 잘 알고 있겠지..