임베디드 소프트웨어를 개발하면서 elf 파일에 대한 정보를 확인하기 위해서 objdump, readelf 와 같은 유틸들을 사용하곤 합니다. Linux 에서는 readelf 툴이 있어서 elf 파일에 대한 정보를 확인 할 수 있었습니다. 그런데 Windows 에서 elf 파일에 대한 정보를 확인 하고 싶어서 readelf 의 Windows 포팅이 있는지를 확인해 봤는데 TDM-GCC 를 설치하면 readelf 가 같이 설치 된다는 것을 알게 되었습니다. Windows 에 TDM-GCC 설치하는 방법은 아래 주소에서 확인 할 수 있습니다.

http://iamaman.tistory.com/2576

위 포스팅에서 tdm-gcc로 설치를 했었는데~ 아래 주소에 readelf 프로그램이 설치되어 있는 것을 확인 할 수 있었습니다.

TDM-GCC-64\bin\readelf.EXE

TDM-GCC 뿐만 아니라 MinGW 를 설치하면 bin 폴더에 objdump.exe, nm.exe 등과 같은 툴도 설치 되는 것을 확인할 수 있습니다.

readelf 를 사용하여 Windows CMD 창에서 elf 파일에 대한 정보를 확인해 보니 아래와 같이 나오는 것을 확인할 수 있었습니다.

readelf 와 같은 툴을 사용하기 위해 굳이 윈도우 환경에서 버추얼박스나 wol 등으로 리눅스를 설치할 필요는 없는 것 같습니다.



C 언어에서 fget() 을 활용하여 간단하게 입력을 받는 방법을 기록하려 한다.

 

fget() 은 스트림에서 문자열을 읽어 들이는 함수인데~ sscanf() 와 함께 아래 코드와 같이 사용 할 수 있다.

 

아래 코드는 숫자 두 개를 받아서 간단하게 라인 수를 넣고 그 합을 출력해 주는 코드이다.

 

#include <stdio.h>

 

#define    TEXTLENGTH    2048

 

int    main()

{

char    text[TEXTLENGTH] ;

double    xi, yi ;

int        n=1;

 

while (fgets (text, TEXTLENGTH, stdin) != NULL )

{

if (sscanf (text, "%lf %lf", &xi, &yi ) == 2 )

{

    printf("%d, %lf+%lf=%lf\n",n, xi, yi, xi+yi);

    ++n ;

}

else

{

    fprintf( stderr, "Data Number Error : %s", text ) ;

}

}

return 0 ;

}

 

일단 현재 내 컴퓨터 환경은 윈도우 7, 64 비트이고 mingw 가 설치되어 있다.

 

위 코드의 파일 명은 standardIO.c 인데~ 다음과 같이 CMD 창에서 컴파일 한다.

 

gcc standardIO.c -o standardIO

 

다음으로 입력을 위한 test.txt 파일을 다음과 같이 만들었다. 단순히 탭으로 구분된 숫자 두 개씩 저장한 것이다.

 

아래 명령어로 test.txt 파일의 내용을 standardIO.exe 에 넣어주면~

 

standardIO.exe < test.txt

 

아래와 같은 결과가 나온다.

 

아래와 같이 명령하면~

standardIO.exe < test.txt > result.txt

 

result.txt 파일이 다음과 같이 만들어 지기도 한다.

 

아래 그림과 같이 standardIO.exe 를 실행하고~ cmd 창에 숫자를 넣어서 계산 할 수도 있다. 종료는 Ctrl + C 를 누르면 된다.


보통 윈도우 환경에서 MATLAB 에서 컴파일러 사용시 Microsoft windows SDK 를 주로 사용하곤 하는데~

 

아래 글을 보니 윈도우 환경에서 아래 글에서 소개드렸던 MinGW 를 사용 할 수도 있더군요.

 

http://kr.mathworks.com/help/matlab/matlab_external/install-mingw-support-package.html

 

일단 MinGW 를 설치해야는데~ 위 주소에 있는 바와 같이 홈 화면에 있는 Add-Ons을 통해 설치 할 수 있습니다.

 

아래 그림과 같이 MinGW 를 선택해서 Add 를 누르면 설치가 되더군요.

 

 

설치시 주의 할 점은 아래 그림과 같이 아래 그림과 같이 체크를 해제 해야 한다는 겁니다.


 

다음으로 MinGW 설치 폴더의 경로에는 스페이스가 있어서는 안 된다는 것입니다. 위 주소의 매뉴얼에 따르면 "C:\TDM-GCC-64" 와 같이 공백이 없게 해야 한다고 합니다.

 

저는 현재 R2015b 버전을 사용 중이고 아래 그림과 같이 MinGW 와 Microsoft windows SDK 를 사용 중입니다.

 




Command window 에서 mex –setup 을 하고~ 사용하기 원하는 컴파일러를 클릭해서 선택 할 수 있습니다.

 

다음으로 위 주소에 나와 있던 예제를 돌려 봤습니다.

 

코든느 아래와 같습니다. 위 주소에 나와 있는 그대로 입니다.

 

copyfile(fullfile(matlabroot,'extern','examples','mex','yprime.c'),'.','f')

mex yprime.c % yprime.mexw64 파일을 만들어 냄

yprime(1,1:4)

 

다음과 같이 실행 되는 것을 확인 했습니다.

 

>> yprime(1,1:4)

ans =

 

2.0000 8.9685 4.0000 -1.0947

 

yprime.c파일을 확인하면 mex 파일을 만들어서 MATLAB 에서 C 함수를 사용하는 방법을 알 수 있을 겁니다.

 

필요하실 분들을 위해 yprime.mexw64 파일도 첨부합니다.

 


yprime.mexw64

관련 글 : http://iamaman.tistory.com/1664


윈도우에서 GCC 를 사용하고자 하는 경우 MinGW 를 사용하거나 Cygwin 을 설치하거나 또는 Virtual box 에 리눅스를 설치해서 사용할 수 있다.

 

아래 포스팅에서 TDM-GCC 설치 방법에 대해 소개한 적이 있는데~

  

2013/06/06 - [유틸] - MinGW 64bits 설치


오늘은 MinGW 뿐만 아니라 boost 라이브러리를 사용하고 싶었다.

 

현재 내 PC 환경은 윈도우 7 64비트이다.

 

찾아보니 아래 주소의 MinGW Distro 가 나왔고, x64-native, GCC 4.8.2, Boost 1.55.0 라는 특징을 가지고 있었다.

 

http://nuwen.net/mingw.html

 

또한 C++11 을 default 로 설정해 놓았다고 한다.

 

위 주소에 들어가서 아래 그림의 링크를 클릭해서 다운로드 받는다. 위에 링크된 mingw-11.6.exe 은 git 이 없는 버전이고

 

아래에 있는 mingw-11.6-without-git.exe 은 말 그대로 git 은 빠진 버전이다.

 

나는 git 은 따로 설치를 했었기에 아래에 있는 mingw-11.6-without-git.exe 를 다운로드 받았다.

 

설치는 굉장히 간단한데~ 다운로드 받은 mingw-11.6-without-git.exe 파일을 더블 클릭하고 아래 그림과 같이 path 를 잡아 주면 된다.

 

위 그림과 같이 최상위 폴더를 잡아주면 C:\ 하위에 MinGW 라는 폴더가 생긴다. 그래서 나는 C:\MinGW 에 설치했다.

 

윈도우에서 Codeblocks IDE 에서 boost library 를 사용하여 소문자를 대문자로 변환해 보았다.

 

소문자를 대문자로 변환하는 과정에서 아래 주소에서 확인한 boost 라이브러리의 to_upper() 함수를 사용했다.

 

http://stackoverflow.com/questions/735204/convert-a-string-in-c-to-upper-case

 

Codeblock 셋팅시에 Compiler 를 다음과 같이 방금 설치한 MinGW Distro 에 맞게 설정 해준다.

 

Compiler 의 search directory 역시 아래 그림과 같이 mingw 의 include path(C:\MinGW\include)를 추가해준다.

 

아래와 같이 코딩하고~

 

#include <iostream>

#include <boost\algorithm\string.hpp>

#include <string>

 

using namespace std;

 

int main()

{

 

string str = "Hello World";

 

string newstr = boost::to_upper_copy<string>(str); // 대문자로 변경후 새로운 변수에 저장

 

cout << "before upper : " << str << ",\t to upper : " << newstr << endl;

 

boost::to_upper(str); // // 대문자로 변경후 현재 변수에 저장

 

cout << "Str to upper : " << str << endl;

 

return 0;

}

 

F9 를 눌러서 Build And Run 을 수행해 보면 다음과 같이 정상적으로 동작 한다.



C/C++ 을 사용하여 우리가 흔히 사용하는 ls 또는 dir 명령과 같이 directory 의 파일 또는 폴더의 리스트를 얻고 싶어서 찾아보니

 

아래 주소의 글이 나오더군요. 역시… stackoverflow

 

http://stackoverflow.com/questions/612097/how-can-i-get-a-list-of-files-in-a-directory-using-c-or-c

 

boost 와 같은 매우 좋은 라이브러리를 사용하는 방법도 있지만 첫번째 답변에 dirent.h 파일을 사용하는 방법이 설명 되어 있었습니다.

 

dirent.h 는 C POSIX library 에 포함되어 있으며 MinGW 나 GCC 등에서는 사용할 수 있지만 Visual Studio에서는 사용할 수 없더군요.

 

http://stackoverflow.com/questions/5530933/dirent-h-in-visual-studio-2010-or-2008

 

사실 이런 파일 리스트와 관련한 함수들은 Cross Platform 으로 구성되어야 코딩하기 편한데 각 플랫폼에 따라 다르게 코딩하는 방법을 알아야 된다는 게 귀찮더군요.

 

그런데 역시.. dirent.h 는 Visual Studio 에서 사용할 수 있도록 아래 주소에 API 가 있었습니다.

 

http://www.softagalleria.net/dirent.php

 

또한 첫 번째로 소개했던 주소에 Visual Studio 에서 사용 할 수 있는 dirent.h 의 링크가 있더군요.

 

http://www.softagalleria.net/download/dirent/

 

몇 가지 파일 중 dirent-1.11.zip 파일을 다운로드 받았고~ Codeblock 을 사용하여 빌드 해 봤습니다.

 

필요하신 분들을 위해 dirent-1.11.zip 파일도 올립니다.

  

dirent-1.11.zip


빌드 후에 아래 그림과 같이 dirTest.exe C:\Windows 라고 명령해서 C:\Windows 의 파일리스트를 확인해 봤습니다.

 

잘 되더군요.

저는 윈도우에서도 Eclipse CDT 와 MinGW 환경에서 C/C++ 코딩을 하곤 하는데요~

 

MinGW64 비트 설치 법은 아래 링크 참조 하시길~

  

2013/06/06 - [유틸] - MinGW 64bits 설치

 

윈도우에서도 Eclipse CDT 를 이용한 빌드가 아닌 Makefile 을 이용해서 빌드를 해야 하는 경우가 종종 있습니다.

 

일단 뭐 Makefile 을 만들어야 하지만, Eclipse CDT 를 비롯한 몇몇 툴들은 Makefile 을 만들어 주곤 하죠~

 

2013/06/06 - [컴퓨터일반] - Eclipse 프로젝트에서 C/C++ Makefile 생성하기


2012/12/06 - [유틸] - Codeblock Project 에서 C/C++ Makefile 만들기, cbp2make

그런데 Eclipse CDT 에서 Makefile 을 이용해서 Debug/Release 모드에서 빌드는 제대로 되는데~ Clean 이 안되더군요… ㅡㅡ;

 

참… 이럴 때 완전 당혹 스럽죠~ 맘을 가라앉히고~ 구글링을 해보니 Eclipse CDT 를 통해 나오는 Makefile 에서는 rm 이라는 리눅스 명령어가 들어가서 그랬더군요.

 

뭐 다른 곳에서는 Cygwin 을 설치한 다음에~ rm 명령어가 들어있는 bin 폴더를 path 로 잡아주라고 하던데~

 

굳이 이렇게 하기 보다는 아래 글에서 설명한 프로그램을 깔아 주면 됩니다. 바로 GNU On Windows 라는 툴인데요~

  

2012/11/11 - [유틸] - GNU On Windows 를 이용하여 Windows 에서 Linux 명령어 사용하기

 

위 글에서 설명한대로 가서 다운로드 받고 설치하시면~

 

설치과정에서 C:\Program Files (x86)\Gow 폴더가 path 로 자동으로 잡히고~

 

아래와 같이 기본적인 리눅스 명령어들을 윈도우에서도 사용하실 수 있습니다.

 


MinGW 를 설치 할때는 보통 msys 를 같이 설치하곤 합니다.

 

msys(minimal system) 는 가벼운 유닉스 계통의 셸 환경을 제공해 주는 툴인데요~ 저는 autoconf 스크립트등을 실행하는데 주로 사용하곤 합니다.

 

아래 포스팅에서 소개 했던 MinGW 64 bits 를 설치 하고 보니 msys 가 없더군요.

 


2013/06/06 - [유틸] - MinGW 64bits 설치


그래서 찾아보니 아래 주소에서 msys 를 다운로드 받을 수 있었습니다.

 

http://sourceforge.net/projects/mingw-w64/files/External%20binary%20packages%20%28Win64%20hosted%29/MSYS%20%2832-bit%29/

 

위 주소에 들어가셔서 아래 그림과 같이 가장 최신의 zip 파일을 다운로드해서 사용하기 편한 폴더에 압축만 풀면 됩니다.

 

저는 C:\MinGW64 폴더 내에 압축을 풀어서 사용 중입니다.

 

압축을 푼 후에 msys.bat 파일을 실행해보니 아래 그림과 같이 msys 가 실행 되네요~

 



아래 포스팅에서 CodeBlocks 에서의 MinGW 설치에 대해 말씀드린 적이 있는데요~


2012/07/31 - [컴퓨터일반] - Codeblock 에서 DLL 사용하기


CodeBlocks 에 같이 포함되어 있는 MinGW 는 32 bits 더군요.

 

보통 CodeBlocks 와 같이 설치하게 되면 아래 폴더에 설치가 되게 됩니다.

 

C:\Program Files (x86)\CodeBlocks\MinGW\

 

요즘은 그래도 많은 분들이 64 bits 운영체제를 많이들 사용하실 텐데요.

 

그래서 찾아보니... 64 bits MinGW 가 있더군요. 아래 주소에서 다운로드 할 수 있습니다.

 

http://tdm-gcc.tdragon.net/

 

위 주소에서 Download 를 누르고 들어가셔서 아래 그림처럼 exe 파일을 클릭하면 Sourceforge 사이트로 넘어가면서 설치 프로그램이 다운로드 됩니다.

 

설치 프로그램을 실행 시키고 아래 그림처럼 초반에 설정하고 ~~

 

 

그 다음 부터는 다음 다음~~ 누르면... 아래 폴더에 설치가 완료 됩니다.

 

C:\MinGW64

 

Default 로 다음다음 누르셨다면~ C:\MinGW64\bin 폴더가 환경변수의 path 로 설정 되셨을 겁니다.

 

윈도우 cmd 창에서 gcc --version 이라고 타이핑했을 때, 아래 그림처럼 나오면 정상입니다.

 


저는 윈도우 환경에서 C/C++ 코딩을 할 때 MinGW 등을 이용하곤 하는데요~

 

아래 포스팅들에서 밝힌바와 같이 C/C++ 코딩시 CodeBlocks 를 주로 사용해 왔습니다.

 

2013/01/20 - [유틸] - Code::Blocks 12.11 좋아졌네요.


2013/01/01 - [유틸] - Code::blocks에서 SQLite3사용하기


2012/08/26 - [컴퓨터일반] - CodeBlock 에서 FFTW 라이브러리를 사용한 FFT 실습


2012/07/31 - [컴퓨터일반] - Codeblock 에서 DLL 사용하기


cbp2make 등을 이용해서 Makefile 도 생성할 수 있고 굉장히 가벼워서 편리하더군요.

 

2012/12/06 - [유틸] - Codeblock Project 에서 C/C++ Makefile 만들기, cbp2make

 

하지만 아무래도 대다수의 사람들은 Eclipse 를 사용하는데... 프로그램이 무겁긴 해도 그 편리성은 정말 뛰어나더군요.

 

오늘은 Eclipse 에서 Makefile 생성하는 방법에 대해 간단히 소개하려 합니다.

 

처음에 윈도우에서 MinGW 사용해서 C/C++ 프로젝트 생성시 Makefile 은 생성이 되지 않더군요.

 

그래서 Codeblocks 처럼 cbp2make 같은 프로그램을 이용해서 Eclipse 프로젝트 파일로 부터 Makefile 을 생성해 줘야 하나라는 생각을 했었습니다.

 

그런데 찾아보니 단순 셋팅만 바꿔주면 되는 거더군요.

 

프로젝트를 클릭후에 오른쪽 클릭~ 해서 나오는 팝업 메뉴에서 Properties 에 들어갑니다.

 

그리고 아래 그림처럼 C/C++ Build >> Tool Chain Editor >> Current builder 를 Gnu Make Builder 로 설정합니다.

 

이후에 빌드를 하면~ 아래 그림처럼 해당 되는 Debug 또는 Release 폴더에 Makefile 이 생성됩니다.


저 블로그의 몇몇 포스팅들을 확인해 보신 분들은 아시겠지만 저는 주로 C/C++ 코딩 할 때 Code::Blocks 을 주로 사용하는데요~ 


2013/01/01 - [유틸] - Code::blocks에서 SQLite3사용하기


2012/07/31 - [컴퓨터일반] - Codeblock 에서 DLL 사용하기

 

컴퓨터를 밀면서 codeblocks 홈페이지에 가보니 Code::Blocks 12.11 로 업데이트가 되었더군요.

 

http://www.codeblocks.org/

 

바이너리 파일은 아래 주소에서 다운로드 하시면 됩니다.

 

http://www.codeblocks.org/downloads/binaries

 

윈도우에서 mingw 와 같이 설치하고 싶으면 codeblocks-12.11mingw-setup.exe 파일을 다운로드 하시면 되고요~

 

관리자 계정이 아닌 분들은 codeblocks-12.11mingw-setup_user.exe 을 다운로드 해서 설치하시면 됩니다.

 

다운로드 후에 설치해보시면 이렇게 심플한 모습입니다.





 

메뉴를 훑어보니 예전 10.05 버전에서는 안 보이던 메뉴들이 보이더군요.

 

일단 예전에 아래 포스팅에서 설명 드렸던 doxyblock 이 기본으로 내장이 되었네요~ 더이상 플러그인을 따로 설치 안해도 되겠군요.


2012/10/14 - [유틸] - Codeblock doxygen plugin DoxyBlocks


 

wxSmith 의 다양한 기능들이 보강되었고~ 새로운 debugger plugin framework 추가가 되었다고 하는군요. 많은 버그들도 수정됐구요~

 

아래 포스팅에서 사용했던 예제에 대해 Code::Blocks 12.11 에서 열고 함수 부분에서 오른쪽 클릭을 해보면 아래 그림과 같은 메뉴가 나오는데요~


2012/10/29 - [컴퓨터일반] - C/C++ 매개변수를 갖는 매크로, #, ## 연산자

 

 

wxSmith 기능의 보강으로 위 그림의 빨간색 네모와 같은 부분들이 추가된 것으로 보이네요~

 

커서의 내용이 써있는 부분이나 call 하는 부분등을 찾을 수 있는데~ 10.04 버전에서는 없어서 불편했는데~ 추가 되니 좋더군요.

 

Code Refactoring 은 심볼명들을 파일 또는 프로젝트에서 일괄적으로 바꾸게 해주는 기능이고~

 

Doxyblocks 는 Doxygen 을 이용한 문서화를 할 때 사용하는 부분이구요~

 

Aligner 는 말 그대로 =(등호) 나 // (주석) 등을 기준으로 코드를 정렬해 주는 기능입니다. 버튼을 눌러 보니 VHDL assingment 인 <=, => 기호 등을 기준으로도 정렬할 수 있고~ 정렬 기준을 추가 할 수도 있습니다.

 

위 팝업 메뉴 중 Format use AStyle 을 누르면~ 전체 코드가 예쁘게 정렬 되니깐 ~ 이 기능도 사용해 보시면 편리하실 겁니다.

 

아직까지도 include 에 대한 auto complete 나 단축키 부분에 있어서는 Eclipse CDT 보다는 기능적으로 약간 미흡함이 느껴지긴 하네요.

 

Eclipse CDT 가 기능은 많지만 너무 무겁고 다운이 잘 돼서 싫다는 분들은 Code::Blocks 12.11 을 사용해 보시는 것도 좋을 것 같습니다.


  1. sunzero 2013.08.05 13:53

    죄송한데..ㅠ_ㅠcall한 부분이나 커서가 가리키는 부분 찾는 거 어떻게 하는지 알 수 있을까요? 이것저것 눌러보는데 잘 모르겠어서요~

    • 남성 2013.08.05 15:48 신고

      위 그림에서 call 한 부분은 Find functions calling~ 부분을 클릭하시면 되고요, INT_XZ 라는 변수들을 찾고 싶으면, Find occurrences of~ 부분을 클릭하시면 됩니다.

+ Recent posts