visual Studio 외부 dll 경로 추가하기

외부 DLL을 가져오는 방식으로 개발하게 되면 실행시 DLL이 필요하다며 에러를 출력하는걸 확인할수 있다. 넷에 공개된 해결방법은 총 3가지이면 아래와 같은 방법이 있다. 1.DLL을 하나의 디렉토리를 넣는다. 2.환경 변수를 등록한다. 3.내 프로젝트만 사용할수 있도록 환경변수를 추가한다. 이렇게 3가지의 방법이 있는데 이 방법으로 개발할시 가장 큰 문제가 배포 파이프라인을 만들기 힘들고 다른 컴퓨터 환경으로 옮길시 에러를 세팅을더 보기

cmake 시작부터 라이브러리까지

이 글은 리눅스/유닉스 환경으로 설정이 되어있습니다. 대부분의 오픈소스인 경우 cmake로 구성되어 있다. 그 이유는 플래폼마다 컴파일 방법 달라 솔루션을 동일하게 설치해야하는 문제가 발생한다. 그래서 위와 같은 모양이 나오게 된다. 하지만 이를 하나의 방법으로 통합시키기 위한툴이 cmake이다. cmake는 다음과 같이 여러개의 플래폼에 맞는 탬플릿을 생성해준다. 이글을 큰 흐름을 설명한 글입니다. 자세한 글 은 다음 링크를 참조해보시기더 보기

Chip8 예뮬레이터 개발

아 최근에 이상한 글에 http://www.multigesture.net/articles/how-to-write-an-emulator-chip-8-interpreter/ 이글에 빠져서 구현을 해보았습니다. 근데 결론적으로 말하서 예물레이터 만드시는분들이 대단해보이네요. 사실상 컴퓨터를 새로만드는 수준입니다..;;;;

CUDA image 처리

회사서 간단하게 발표자료를 만들면서 쿠다 프로그래밍을 해보았습니다. 근데 node회사라는게 함정입니다. 간단한 영상을 미러링 해주는 프로그램입니다. 실행 결과는 아래와 같습니다. 가우시안 블루같은경우도 해당 코드를 가져가서 사용하면 쉽게(?) 사용할수 있을것입니다. 이미지 처리는 아래 bitmap이미지를 사용했습니다. https://github.com/ArashPartow/bitmap/blob/master/bitmap_image.hpp 1060 GTX가 블록단 스레드가 128이 한계라서 스레드 사이즈를 32 * 4로 하였습니다. Warp단위라 속도가 빠를겁니다.

MSVC C++ 전처리만 수행하기

C++ 레딧에 테스트코드 라이브러리중에 ddoctest가 있다구 해서 한번 사용해보았다. 해당 깃 링크는 https://github.com/onqtam/doctest 이다. 예제 코드는 다음과 같다 하지만 막상 TEST_CAST랑 CHECK의 구현부를 확인할려고하면….. 다음과 같은 코드를 볼수있다. 매크로의 최대의 단점중 하나인데 이는 컴파일 옵션을 주어서 어느정도 해결할수 있다. 바로 /p옵션인데 자세한것은 다음의 링크를 참조해주자. https://docs.microsoft.com/ko-kr/cpp/build/reference/p-preprocess-to-a-file?view=vs-2019 여튼 이옵션을 주고 컴파일하게되면 컴파일 바이너리위치에 .i라는 파일이 생성된걸더 보기

Visual Leak Detector을 이용한 메모리 누수 탐지법

C++을 하다보면 어쩔수 없이 생기는 것이 메모리누수입니다. 물론 최근에는 스마트포인터같은게 있다고 하지만 아직도 어쩔수없이 동적할당을 스마트포인터를 통해서 할당을 하지않습니다. 그러다보니 메모리누수는 당연시 여깁니다. 이를 방지하기 위해 C++ msdn에서도 메모리누수를 확인하는법에 관해 적혀있습니다. 하지만 이와 별개로 좀더 자세히 알고싶을때가 있습니다. 그래서 여러 메모리누수탐지 라이브러리가 있는데 대표적으로 Visual Leak Detector입니다. 해당 라이브러리는 사용법은 vld라는 헤더파일만 입력만 해주면됩니다.더 보기

카이사르 암호 (C++)

시저암호라고 불리는 카이사르 암호입니다. 아주 옛날에 만들어진 암호로 알고리즘은 a부터 z까지 원형큐에 있다고 생각하면 쉽게 풀수있습니다. 코드는 다음과 같습니다. C++ 챌린지 문제를 풀다가 나온문제인데 이게 암호화 라고해야하나…

condition_variable 조건변수 주의점

C++의 condition_variable을 보게되면 아래의 코드가 나오는데 매번 cv.wait가  신경이 쓰였다. 일단 아래의 코드를 보자 논리적으로 보면 cv.wait의 두번째 인자가 있는이유가 딱히 없다는걸 알수있다. 헌데 왜 이코드가 들어갈까 이는 해당문서를 자세히 보면 알수있다. 위에 잘보면 이는 spurious wekeup라는 문서가 있을것이다.  이게 위키피디아에도 있는데 해당 문서를 잘보면 모든 OS에서 발생한다고 한다. https://en.wikipedia.org/wiki/Spurious_wakeup  깨우지않았는에도 불구하고 스스로 깨어지는 문제라는 것이다.더 보기

Redis 코드 삽질기(1)

이글은 redis 코드에 기여하기위해 간단한 리뷰이다.  시작시 initServer함수에서 코드의 일부분이다. 잘보면 ServerCron을 1초마다 실행시킨다.  해당 함수를 잘보면 서버가 동시접속과 리플리케이션 함수를 볼 수있게 구현이 된걸 볼수있다. ServerLog라는 함수가 있다. 이 함수는 redis의 자체적인 로그함수로 각각의 레벨이 존재한다.  이를 LL_NOTICE로 바꾸고 실행시켜보면 아래와 같이 출력된다. 참고로 listLength함수는 양방향 리스트 구조체의 길이를 구하는 매크로 함수인걸 확인할수있다. List더 보기

스레드로 인한 메모리 시각화

스레드의 메모리영역의 읽기 쓰기 수정 같은 작업을 시각화 해주는 온라인 서비스를 발견하였습니다. 사이트는 http://svr-pes20-cppmem.cl.cam.ac.uk/cppmem/ 해당 프로그램은 모든 교차 실행을 판단하고 각 스레드를 시각해주는 역할을 합니다. 메모리 모델에 대해서는 다음의 링크를 참조해주시기 바랍니다. 해당툴로 스레드를 정의할려면 삼중 중괄호를 해주고 그안의 작업에 대해 정의를 할려면 괄호를 해주면됩니다. 일단 간단하게 두개의 스레드를 만들고 data race를 유발 시켜봅겠습니다. 다음은 아래의더 보기