Programming/C, C++(6)
-
Onvif 라이브러리 크로스 컴파일 방법 정리
Onvif 라이브러리 크로스 컴파일 방법 정리 이번에는 libOnvif.so 라이브러리 파일을 생성하는 방법에 대해 정리해보고자 합니다. 현대사회를 살아가는 여러분들에게 이미 WSDL이나 SOAP은 거의 잊혀진 기술이다보니, 마치 로스트 테크놀로지같은 느낌일텐데요. 그나마 다행인 점은 검색하면 위키피디아 등에 어떤 기술인지 잘 설명이 되어있다는 점입니다. 물론 크게 도움은 안된다는게 문제지만 말이죠. 이 글에서는 SOAP 프로토콜을 통해 제공되는 Onvif WSDL을 기반으로 C/C++ 코드를 생성해내는 방법과, 오류 대처 요령에 대해 살펴봅니다. 만약 여러분이 Onvif 라이브러리를 빌드해야 할 일이 생겨서 컨플루언스 등에 남겨진 고문서를 찾아본다면 생각보다 쉽게 해결될수도 있지만, 의외로 난항에 부딪..
2022.01.05 -
libcrypt.so와 glibc의 크로스 컴파일에 대하여
libcrypt.so(crypt 라이브러리)에 대하여 이전에 OpenResty(NGINX)를 크로스컴파일하는 과정을 기록한 글에서, 글의 말미에 libcrypt.so에 관련된 내용을 잠깐 기록했었다. 별도의 글을 남기는 이유는 라이브러리 자체가 특정 서버에만 영향을 끼치는 게 아니며, 리서치 시 glibc의 libgcrypt.so, openssl의 libcrypto.so등 비슷한 라이브러리로 인해 파악이 어려웠기 때문이다. 간략하게 libcrypt.so에 대해 알아보자. Crypt 라이브러리 crypt 라이브러리를 구글에서 검색해보면, 위키피디아의 crypt(c)페이지가 나온다. 페이지 상단의 몇 줄을 읽어보면, 비밀번호 해쉬값 생성시 사용되는 녀석임을 알 수 있다. 이제 왜 이 녀석이 없으면 HTTP_..
2020.05.18 -
[C/gLib] trim과 문자열을 찾는 함수 작성하기
문자열을 특정 토큰단위로 끊거나 할 때는, 공백이 있을 경우를 대비해서 trim이 필요하다. 물론 gLib을 사용한다면 토큰 단위로 끊은 다음에, g_strstrip을 이용해서 앞/뒤의 공백만 잘라주는 편이 더 효율적인 경우가 많다. 처음에는 공백만 제거하는 함수를 만들었다가, 이후에는 특정 문자열을 제거하는 함수로 수정했다. 작성한 함수는 아래와 같다. gchar* trim(char* target_string, char symbol) { if(target_string == NULL) {return -1;} gchar before_string[256]; gchar after_string[256]; gint index_before=0; gint index_after=0; gint len_target_str..
2019.04.26 -
GLib을 이용해서 문자열 나누기(g_strsplit)
C에서 문자열을 조작하는 것은 생각보다 짜증나는 일이다. GLib을 사용하면 문자열 조작을 수월하게 할 수 있는데, 문서만 잘 읽어보면 어렵지 않게 활용할 수 있다. 일단 GLib이 포함되어있고, 문자열을 조작할 일이 생겼다면 이 글을 읽기보다 String Utility Functions: GLib Reference을 보도록 하자. 훨씬 도움될 것이다. 문자열을 자르거나 붙이는 등, 대부분의 것들은 문서에 포함되어있다. Reference에 없는 함수로 부족한 경우에는, strlib.h의 내용으로 구현 가능한 경우가 대부분이다. 내 경우에는 이 Reference 중 g_strsplit을 자주 사용하며, 이 글을 작성하는 이유도 사실 g_strsplit에 대한 내용을 정리하기 위함이다. 특정 토큰을 이용해서..
2019.04.17 -
[C/C++] 문자열 타입의 MAC ADDRESS 포멧 확인 (sscanf)
Front-end에서 MAC ADDRESS를 전달하는 경우 값이 변경될 수 있으므로, 최소한 전달받은 문자열이 MAC ADDRESS양식에 맞는지는 확인할 필요가 있었다. 특히 MAC ADDRESS를 문자열 형태로 저장할 때는 더더욱이나. 검색하면 어렵지 않게 찾을 수 있는 내용이지만, 업무가 바빠서 사이드 프로젝트를 못하니 뭐라도 정리하기로 했다. #include int sscanf(const char *buffer, const char *format, argument-list); sscanf는 buffer에 저장된 데이터를 지정된 format에 맞는 형식으로 읽어들이며, 성공적으로 변환된 필드 수를 리턴한다. 따라서 00:00:00:00:00:00과 같은 형식으로 문자열을 전달받았을 때, sscanf를..
2019.03.19 -
[C/C++] 정수를 IP주소로 변환하기 (Decimal to IP Address)
정수IP Address 변환은 Convert Decimal to IP, browserling등에서 제공하므로, 제대로 변환되는지 확인이 가능하다. IP주소값의 구조를 알고 있다면, 어렵지 않게 구현이 가능하다. 매번 필요할때마다 찾아보는데, 매번 까먹어서 이번 기회에 대충이나마 정리해두기로 했다. IP 주소(IPv4) IPv4 기준으로 IP 주소는 8bytes짜리 네 개가 구성되어 만들어진, 32bytes짜리 정수형이다. 따라서 다음과 같이 비트 연산을 하면, 언어에 상관없이 정수로 표현된 IP주소를 문자로 변경할 수 있다. void decimalToIPAddress(int param_decimalIp) { printf("IP Address: %d.%d.%d.%d\n", (ip>>24)&0xFF, (ip..
2019.03.18