반응형

C , C++, C# 45

[Visual Studio] 라이브러리 덤프하기

c++ softfloat 써드 파티를 사용해야 하는데 이를 라이브러리로 빌드하여 필요한 모듈에 링킹하는 작업이 필요하다. 그런데.. 계속해서 링킹에러가 발생해서.. 열심히 하던중.. CMake Configuration을 잘못했는지 원본의 make를 제대로 안했는지.. 알 길이 없다. 결국 처음부터 다시 시작해 원본의 makefile과 같도록 헤더와 소스파일을 활용하여 컴파일 및 빌드까지 완료해서 라이브러리를 새로 만들었다. 하지만 다른 모듈과 링킹 에러이다... 해당 기호가 진짜 라이브러리에 없는건가.... 이제 라이브러리를 뜯어봐야되는데 어떻게 뜯을 수 있는지 간단히 알아보자. Visual Studio 2022에서 Cmake 프로젝트를 만들면 간단한 샘플 파일을 얻을 수 있다. 샘플 코드는 아래와 같다..

C , C++, C# 2022.09.05

[C++] restrict keyword: AMP(Accelerated Massive Parallelism)

뭐 분석 오류로 인해서 보고 있었는데 우선 Visual Studio의 이친구였다... 우선 난 첨본다.. 찾아보면 아래에서 알 수 있다. https://docs.microsoft.com/ko-kr/cpp/parallel/amp/cpp-amp-overview?view=msvc-170 C++ AMP 개요 자세한 정보: C++ AMP 개요 docs.microsoft.com 아아아~~ C++의 GPU 기능과 병렬처리를 통해 속도를 빠르게 할 수 있는거구나 그런데 Visual Studio 2022 버전 17.0 부터는 사용을 안하는구나..!? 하고 넘어가면 될듯하다. 안에 기본 예제 정도가 있으니 한번 따라해보면 되는데 내 문제는 아래 헤더 파일의 내용이다. 흠.. restrict..? 아 이 친구가 문제였는데...

C , C++, C# 2022.07.04

복잡한 선언 읽기: C / C++

어쩌다 여러방면의 코드를 얘기한 적이 있었는데.. 복잡한 구문을 쉽게 읽고 쓸수 있는 방안이 있다고 했다. 찾아보니 나선 방향?으로 읽고 이해하면 쉽다고 했다. C에서 Signal 라이브러리 함수를 읽을정도면 완벽히 이해한 것이다. 아래 간단한 예제는 우리 모두 무슨 의미인지 쉽게 알 수 있다. const char *chptr; // pointer to char const char * const chptr; //const pointer to char volatile char * const chptr; // const pointer to chat vo.. 문제는 아래와 같은 예제들이다. 아래 참조를 통해 공부해보자. char *(*fp)( int, float *); void (*signal(int, voi..

C , C++, C# 2022.06.21

[C++] cmd system 함수 / xcopy

작업하는데 코드가 실행될때 디렉토리를 복사하며 그것을 C++ 코드로 실행해야 했다. 찾아보면 금방 확인할 수 있으니 아래에 정리해본다. 먼저, xcopy 명령으로 디렉토리를 복사하는 과정을 해보자. 쉽게 확인할 수 있다. 문제는 복사할 대상 경로를 "....." 큰따옴표로 잘 감싸주자. 그리고 복사할때, /I 옵션을 사용하면 선택문 없이 디렉토리로 가정하여 바로 복사해준다. xcopy /? 명령어를 사용해 모든 옵션을 확인할 수 있으니 필요한 옵션들은 확인하면 된다. 자 이제 해당 명령을 코드로 cmd 명령을 실행하게끔 해보자. 찾아보면 더 많을수도 있지만 필자는 system() 함수를 사용하였다. 그대로 사용할 명령어를 string 타입으로 사용하면 된다. 이스케이프" 쌍따옴표를 잘 사용하면 쉽게 사용..

C , C++, C# 2022.05.30

[Cmake] add_custom_target / .cmake file

한번의 명렁어로 여러 target은 cmake -B [build directory] --target all 과 같이 모든 target을 빌드할 것이다. 그런데 내가 좀더 구분짓고 싶은것은 일부 타겟만 빌드할수 없을까 이다. 그래서 Cmake를 조금 찾아보면 custom target을 통해 이를 해결할 수 있다. 그리고 이를 .cmake 파일을 통해 만들었다. .cmake는 마치 스크립트와 같은 느낌으로 이해하면 되는데 function() 을 사용하여 CmakeLists.txt 에서 해당 function의 이름을 호출하면 실행되는 방식으로 이해할 수 있다. 위와 같이 CmakeLists.txt에 cmake 파일의 경로를 include하고 function의 이름으로 호출하면 .cmake 파일의 내용을 실행한..

C , C++, C# 2022.05.18

[Cmake] 헤더 파일 Include 포함시키기

Cmake를 작성하여 간단한 프로그램을 짜면 보통 아래와 같이 사용할 수 있다. 간단하니 헤더파일 / 소스파일 / cmake 파일이 같은 경로에 있다고 보자. 이 간단한 것을 Visual Studio Code로 보면 아래와 같다. 이렇게 경로가 단순하게 되어 있다면 위처럼 Executabble에 간단히 헤더 파일과 소스파일을 적어서 빌드하면 된다. 그런데 헤더 파일이 많아지고 소스파일 코드에 include 경로가 복잡해지면 문제이다.... include에 헤더파일의 경로를 입력하는데 분명 어려움이 있을것이고 이로 인해 Undefined Reference.... 라고 하면서 파일이나 경로를 찾을 수 없다고 하는 순간 문제다. 물론 그럴거면 절대경로 다써서 하면 되겠지만.. 그건 좀 아니다. 그럴때 cmak..

C , C++, C# 2022.03.08

[C++] 한글이 있는 파일 읽어 저장하기: Euc-kr

C++로 뭔가를 하면서 파일을 읽어오는데 파일을 읽는 텍스트 안에 한글이 있을떄 처리하는 과정이 필요했다. 이를 보면서 파일의 인코딩들을 작업하는 내용도 있었는데 그 부분은 나중에 하고 한글같은 경우는 일반적인 string으로 데이터를 처리하지 못할것이다. 한글은 보통 2바이트로 처리해야 할것이고 C++에서는 이런 데이터를 처리하기 위해 wstring 클래스를 사용해야 하고 파일을 읽을때, ifstream이 아닌 wifstream을 이용한다고 한다. 그것을 그대로 사용해보면 아래와 같다. 디버깅해서 wstring에 들어가는 값을 보니... 다 깨져있다... 이를 어떻게 처리해야 할까... 싶다 2가지 방식이 있다. wstringstream의 imbue 함수를 사용하는 방법과 locale의 global 변..

C , C++, C# 2022.02.22

[C++] StackWalker64 / 스텍 추적

Visual Studio에서 _asm 키워드때문에 가져온 문제이다. 먼저, 64비트에서는 더이상 MSVC 친구가 _asm 키워드를 지원하지 않는다. 그래서 보통 _asm 코드를 새로 만들어서 Visual studio에서 링크를 새로 걸어 처리하는 방식이다. 그런데 Windows api에 _asm에 적힌 메모리 추적 관련 함수를 제공하고 있었다. 그래서 _asm 어셈블리 코드의 내용과 같은 기능을 코드로 적용하는 방식이 있다. 그와 관련해서 2가지 api가 존재한다. 이중에서 Stackwalk64가 유명한것 같다. 필자는 _AddressOfReturnAddress api로 원래의 _asm 코드와 같은 코드를 만들어서 처리했다. StackWalker64를 활용한? 스레드 및 call stack을 확인할 수 ..

C , C++, C# 2022.02.13

[Cmake] Googletest setting Windows

Googletest를 윈도우에서 사용해보자. 요구사항으로는 Windows에서 사용하기 위한 make 명령과 GCC 컴파일러, cmake이다. 먼저 방법은 다음과 같다. 1. 오픈소스 저장소에서 Googletest를 가져온다. 2. 빌드를 한다. 저장소를 Mingw경로에 받는다. googletest 디렉토리로 이동하여 build를 저장하기 위한 디렉토리를 생성한다. 아래의 제너레이터로 실행한다. 3. 빌드 파일 설정 lib디렉토리의 .a 파일들이 있을텐데 이를 Mingw의 lib에 복사하여 붙여넣는다. ex) C:\mingw64\x86_64-w64-mingw32\lib gtest 디렉토리(C:\mingw64\googletest\googletest\include)를 복사하여 MingW\lib\gcc\x86_..

C , C++, C# 2022.01.05
반응형