Eclipse에서 CDT 플러그인과 MinGW에서 지원하는 C/C++ 컴파일러를 통해 개발하는 방법에 대해서 소개했었다.
Eclipse Galileo에서 C,C++ 개발환경 구축하기 - CDT, MinGW

참고로 오래전에 MS Visual Studio 환경에서 MySQL과 연동하는 방법과 ActionScript 3.0 으로 만들어진 MySQL Driver에 대해 소개한 적이 있다.
MS Visual C++ 6.0 환경에서 MySQL 연동하는 방법
Actionscript 3 Mysql Driver

이 글은 Eclipse + MinGW 환경에서 C/C++로 MySQL과 연동하는 방법을 소개한다. MySQL 연동을 위해서 Eclipse환경을 선택한 이유는 기존 프로젝트들이 Java, Flash 로 제작되어서 하나의 툴에서 개발하고 싶은 욕구가 있기 때문이다. 하나의 Eclipse로 Java, PHP, C/C++, Flash 개발을 다할 수 있기 때문에 지원하는 각종 플러그인을 함께 공유할 수 있고 툴을 이리저리 이동할 필요도 없어진다.

Eclipse와 MinGW으로 개발환경을 구축한 만큼 그에 맞게 개발방식을 알아야 할 것이다.


1. MinGW Utils 설치

MinGW에서 지원하는 Utils을 다운로드 받아서 설치해야 한다. 이것이 필요한 이유는 reimp.exe 가 필요하기 때문이다. 자세한 내용은 다음에 설명한다.

다음 링크로 들어가서 아래 리스트에 MinGW Utilities > mingw-utils > mingw-utils-0.3 로 가면 mingw-utils-0.3.tar.gz 파일이 있다. 이것을 다운로드 받는다.

http://sourceforge.net/projects/mingw/files/

압축을 풀면 bin, doc 폴더가 있는데 이 두개 폴더를 복사해서 MinGW 설치폴더에 덮어씌우면 된다. 그것으로 설치 끝이다.


2. MySQL 라이브러리 설치
MySQL 서버가 이미 설치가 되어 있는 경우라고 가정한다. 일단 다음 링크로 가서 MySQL MSI 설치자를 다운로드 받는다.

http://dev.mysql.com/downloads/mysql

다운로드 받은수 설치시에 아래와 같은 Setup Type을 묻는 내용이 나오면 custom을 선택한다.

MySQL이 이미 설치되어 있거나 어떠한 경로라도 접속할 수 있는 환경이 이미 조성되어 있는 경우에는 Server를 굳이 설치할 필요가 없으므로 아래처럼 C개발시 필요한 파일만 설치가 되도록 설정한다.

아마도 C:/Program Files/MySQL/MySQL Server 5.1/ 내에 설치될 것이다. 그 안에는 include와 lib만 존재할 것이다. include는 c언어의 header 파일들이 존재할 것이다. 그리고 lib에는 MySQL에 접속하기 위한 각종 Lib파일들이 존재한다.


3. MySQL 연동을 위한 MinGW 컴파일러 라이브러리로 만들기
MySQL설치 폴더에 lib/opt/libmysql.lib 가 있다. 이것은 MySQL을 접속하기 위한 구현체 정의가 담겨있다. C,C++로 개발할 때는 이것을 참조해서 개발하고 컴파일해야 할것이다.

하지만 MinGW에서 제공하는 컴파일러는 .lib를 직접 사용할 수 없다. 그래서 대신 확장자가 .a인 MinGW 전용의 라이브러리로 변경해야하는데 앞서 소개한 MinGW Utils에 reimp.exe와 dlltool.exe가 그것을 가능하게 해준다.

먼저 CMD 창에 들어가서 다음과 같이 입력해본다.

C:\>cd C:/Program Files/MySQL/MySQL Server 5.1/lib/opt
C:\>reimp -d libmysql.lib
C:\>dlltool -d LIBMYSQL.def -D libmysql.dll -k -l libmysql.a

위처럼 명령후 opt 폴더안에 libmysql.a가 있는지 확인한다. 만약 없다면 opt폴더를 c:\ 하위로 옮겨보고 그 안에서 위 명령을 다시 해보길 바란다.

reimp -d libmysql.lib 는 LIBMYSQL.def를 만들어내는데 이것을 열어보면 라이브러리에 정의된 함수가 쭉 나열되어 있음을 확인할 수 있다. dlltool 은 이것을 이용해 libmysql.a를 뽑아낸다.

libmysql.a는 복사해서 MinGW의 lib폴더에 복사한다.

그리고 MySQL 설치폴더에 include은 mysql로 수정하고 MinGW의 include 내에 복사하면 아래처럼 사용할 수 있게 된다.

#include <mysql/mysql.h>


5. Eclipse에서 C프로젝트를 생성해 MySQL 접속해보기
이제 C로 MySQL에 접속하기 위한 준비는 완료했다. 이제 C프로젝트를 만들고 MySQL 접속하기 위한 간단한 예시를 만들어보자. File>New>C Project를 아래처럼 생성한다.



Project Explorer에 MySQLTest 프로젝트가 만들어졌을 것이다. src 폴더를 열어 MySQLTest.c를 다음 코드로 수정하자.


#define SOCKET int

#include <stdio.h>
#include <mysql/mysql.h>

#define DB_HOST "localhost 또는 아이피, 도메인"
#define DB_USER "DB 사용자 ID"
#define DB_PASS "DB 사용자 Password"
#define DB_NAME "DB 이름"

int main() {
	MYSQL *conn_ptr;
	conn_ptr = mysql_init(NULL);
	if(!conn_ptr) {
		printf("mysql_init failed!!\n");
		return 0;
	}

	conn_ptr = mysql_real_connect(conn_ptr, DB_HOST, DB_USER, DB_PASS, DB_NAME, 3306,(char *)NULL, 0);

	if(conn_ptr) {
		printf("연결이 성공 되었습니다.\n");
	} else {
		printf("연결에 실패했습니다.\n");
	}
	mysql_close(conn_ptr);
	return 1;
}

코드를 만들었으니 이제 MySQL 라이브러리를 사용한다는 컴파일 옵션을 주어야 한다. 방법은 다음과 같이 하면 되겠다.

이클립스 메뉴에서 Project > Properties로 들어간다. C/C++Build > Setting으로 들어가 Tool Setting 탭으로 누른다. 다음으로 MinGW C Linker > Libraries를 선택한다. 아래처럼 mysql을 등록한다. 이렇게 하면 컴파일시 -lmysql로 옵션을 주는 것과 같아진다.


Ctrl+B나 메뉴>Project>Build All을 선택해서 컴파일 해보자. 다음과 같처럼 컴파일이 정상적으로 나왔다면 성공한 것이다. 
 

**** Build of configuration Debug for project MySQLTest ****

**** Internal Builder is used for build               ****
gcc -O0 -g3 -Wall -c -fmessage-length=0 -osrc\MySQLTest.o ..\src\MySQLTest.c
gcc -oMySQLTest.exe src\MySQLTest.o -lmysql
Build complete for project MySQLTest
Time consumed: 578  ms. 

Ctrl+F11이나 Run > Run 을 해보자. 콘솔창에 아래처럼 나오면 성공한 것이다.


만약 위처럼 아무 메시지 없이 실행되지 않는 것처럼 보인다면 C:/Windows/System32 내에 libmysql.dll이 없는 것을 의심해본다.

실제로 CMD창을 열고 프로젝트의 Debug안에 있는 MySQLTest.exe를 CMD 창에 드래그해 붙여넣은 다음 Enter를 눌러 실행해보자. 아래처럼 "연결이 성공 되었습니다"라고 보이지 않고 그 아래처럼 libmysql.dll이 없다고 나오면 아래서 소개하는 두가지 방법으로 해결할 수 있다.



일단 libmysql.dll 이 있다고 가정한다면 아래 둘중에 하나를 선택해서 하면 된다.

  1. libmysql.dll을 C:/windows/System32에 복사한다.
  2. 프로젝트의 Debug폴더나 Release폴더(즉, exe 실행파일과 같은 경로)에 libmysql.dll을 복사한다.


dll과 함께 컴파일 처리하면 좋겠는데 아직 방법은 모르겠다.

libmysql.dll을 얻는 방법은 http://www.dll-files.com/ 에 접속해 libmysql.dll을 찾는다. libmysql.dll을 다운로드 받을 수 있는 페이지가 나오면 다른거 누르지 말고 아래 그림과 같은 Free download의 Download 버튼을 눌러 다운로드 받는다.



6. 테이블 생성, 선택, 삽입, 편집, 삭제 해보기
접속까지 했으니 응용하는 것은 누워서 떡먹기다. Create table, Select, Insert, Update, Delete 예제는 다음과 같다.

#define SOCKET int

#include <stdio.h>
#include <mysql/mysql.h>

#define DB_HOST "localhost 또는 아이피, 도메인"
#define DB_USER "DB 사용자 ID"
#define DB_PASS "DB 사용자 Password"
#define DB_NAME "DB 이름"

#define SQL_CREATE_TABLE "CREATE TABLE `mysql_api_test` (\
    `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,\
    `num` INT NULL ,\
    `string` VARCHAR( 20 ) NULL \
    ) TYPE = MYISAM ;"
#define SQL_INSERT_RECORD "INSERT INTO `mysql_api_test` ( `id` , `num` , `string` ) \
    VALUES (\
    NULL , '%d', '%s'\
    );"
#define SQL_SELECT_RECORD "SELECT * FROM `mysql_api_test`"
#define SQL_DROP_TABLE "DROP TABLE `mysql_api_test`"

int main() {
	MYSQL *connection=NULL, conn;
	MYSQL_RES *sql_result;
	MYSQL_ROW sql_row;
	int query_stat;
	int i;

	char query[255];

	mysql_init(&conn);

	// DB 연결
	connection = mysql_real_connect(&conn, DB_HOST, DB_USER, DB_PASS,DB_NAME, 3306,(char *)NULL, 0);
	if(connection==NULL) {
		fprintf(stderr, "Mysql connection error : %s", mysql_error(&conn));
		return 1;
	}

	// 테이블 생성
	query_stat=mysql_query(connection,SQL_CREATE_TABLE);
	if (query_stat != 0) {
		fprintf(stderr, "Mysql query error : %s", mysql_error(&conn));
		return 1;
	}

	// 레코드 삽입
	for(i=0;i<5;i++) {
		sprintf(query,SQL_INSERT_RECORD,100+i,"안녕하세요 지돌스타예요~");
		query_stat = mysql_query(connection, query);
		if (query_stat != 0) {
			fprintf(stderr, "Mysql query error : %s", mysql_error(&conn));
			return 1;
		}
	}

	// 셀렉트
	query_stat=mysql_query(connection,SQL_SELECT_RECORD);
	if (query_stat != 0) {
		fprintf(stderr, "Mysql query error : %s", mysql_error(&conn));
		return 1;
	}

	// 결과 출력
	sql_result=mysql_store_result(connection);
	while((sql_row=mysql_fetch_row(sql_result))!=NULL) {
		printf("%2s %2s %s\n",sql_row[0],sql_row[1],sql_row[2]);
	}
	mysql_free_result(sql_result);

	// 테이블 삭제
	query_stat=mysql_query(connection,SQL_DROP_TABLE);
	if (query_stat != 0) {
		fprintf(stderr, "Mysql query error : %s", mysql_error(&conn));
		return 1;
	}

	// DB 연결 닫기
	mysql_close(connection);
	return 0;
}


7. 정리하며
이미 많은 분들이 삽질(?)을 많이 해주셔서 비교적 쉽게 MySQL 개발 환경을 조성할 수 있었다. 뭔가 이런 환경에서 개발한다면 크로스 플랫폼 애플리케이션을 만드는데 도움이 될 것 같다. 관련된 정보를 찾아봐서 개발방법에 대해서 좀더 숙지해야할 필요가 있을 것 같다.


8. 참고글
Eclipse Galileo에서 C,C++ 개발환경 구축하기 - CDT, MinGW
MS Visual C++ 6.0 환경에서 MySQL 연동하는 방법
VC용 lib화일을 mingw용 라이브러리로 변환하기
MinGW로 Mysql plugin driver compile하는 방법
DLL 다운받기


글쓴이 : 지돌스타(http://blog.jidolstar.com/679)

윈도우 환경에서 Eclipse Galileo 버전으로 C, C++ 개발을 위한 환경을 만드는 것을 설명하는데 목표가 있다. 기존에 Eclipse기반으로 Flash Builder 플러그인을 설치해 Flash 개발을 하거나 Java 개발하시는 분들이 같은 환경에서 C, C++을 개발하고자 한다면 이 글은 유용한 팁정도가 될 것이다.


1. MinGW를 설치한다.
MinGW(한국어 발음 밍우?)는 무료로 쓰고 배포할 수 있는 MS 윈도우 헤더 파일과 라이브러리로, 어떠한 써드 파티 C 런타임 DLL에 의존하지 않고 네이티브 윈도우 프로그램을 만들 수 있는 GNU 툴을 제공한다. 쉽게 이야기해 MinGW는 윈도우에서 툴이나 dll에 의존하지 않는 동작하는 프로그램을 만들 수 있도록 도와준다.

MinGW에 대해 : http://ko.wikipedia.org/wiki/MinGW 

물론 C/C++를 개발하기 위해 Cygwin을 이용해도 된다. 하지만 cygwin 기반으로 제작한 것은 항상 cygwin1.dll이 필요한다. 또한 개발한 결과물은 라이센스 문제로 상용으로 팔기가 곤란하다. 게다가 윈도우에서 직접 개발한다기 보다 가상의 리눅스 콘솔을 이용하는 것이다. 그래서 여러가지로 MinGW이 장점이 많다.


1.1 MinGW 받기
공식 사이트 http://www.mingw.org/ 로 간다. 좌측 메뉴에 Downloads 페이지로 이동한다. Download Now 버튼을 눌러 최신버전인 MinGW-5.1.6.exe(2010.04.20)를 다운로드 받는다.


1.2 MinGW 설치
  • 다운받은 MinGW-5.1.6.exe를 실행한다.
  • Welcome 화면 Next를 클릭한다.
  • Download and install을 선택후 Next 버튼을 클릭한다.
  • I agree를 클릭한다.
  • Candidate를 선택후 Next를 클릭한다.
  • 설치하고자 하는 것을 선택후 Next를 클릭한다. g++ compiler와 MinGW Make는 반드시 선택한다.
  • 설치하고자 하는 디렉토를 선택한 다음 Next 클릭
  • Install을 클릭하면 이제 필요한 것을 다운로드 받아 설치를 시작한다.
  • 설치가 완료되면 Next 클릭후 Finish를 누른다.

 

1.3 GCC를 실행하기 위한 윈도우 환경변수 설정하기

이제 어느 경로에 있던지 gcc 컴파일러를 실행할 수 있도록 환경을 조성해줄 필요가 있다.

이 방법은 Cygwin을 사용하지 않고 오로지 MinGW만 사용하는 경우에 해당한다. 만약 Cygwin을 함께 사용하시는 분이라면 배치파일을 만들어 사용하는 방법도 있다. (http://kldp.org/node/48962)

  • 제어판에서 시스템 폴더 클릭. window 7환경에서 개발한다면 검색창에서 시스템을 입력한뒤 시스템 환경 변수 편집을 선택한다.
  • 아래 표시된 방법대로 입력하면 되겠다. 최종적으로 MinGW 설치된 폴더에 Bin 폴더를 입력하는 것을 목표로 한다.


  • CMD창에서 gcc --version과 mingw32-make를 입력하고 다음과 같이 나오면 성공적으로 설치된것임

 이제 MinGW가 설치되었으므로 window 기반에서 C, C++등을 개발할 수 있는 환경이 만들어진 것이다. 다음에 나오는 Eclipse기반이 아니더라도 메모장에서 C코드를 짜고 GCC로 컴파일할 수 있다. 하지만 개발툴을 메모장을 사용할 수는 없는 노릇아닌가?


2. Eclipse Galileo 버전을 설치한다.
Eclipse는 기존에 설치했던 사람이 대부분일 것이다. 이 설명은 필요없는 내용일 수 있으나 그냥 적어본다.

일단 Eclipse는 아래 링크에서 자신의 개발하고자 하는 목적별(Java, C/C++, PHP등)로 다운로드 받아 설치할 수 있다.

http://www.eclipse.org/downloads/

필자는 Java기반에서 개발하는 일이 많으므로 Java EE Developers를 위한 Eclipse IDE를 설치했다. Windows 32bit 기반을 다운로드 받았다. 설치는 받은 압축파일을 원하는 곳에 압축만 풀어주는 것으로 완료가 된다. 본인은 E:\eclipse 에 설치했다. C 드라이브에 설치하지 않은 이유는 나중에 운영체제를 다시 설치하는 경우에 Eclipse를 보존하기 위함이다.

Eclipse를 처음 설치하는 사람이라면 반드시 JRE가 자신의 컴퓨터에 미리 설치가 되어 있어야 Eclipse 구동이 가능하다. 다음 링크에서 JRE나 JDK 최신버전을 설치하면 되겠다.

http://java.sun.com/javase/downloads/index.jsp

만약 C/C++기반인 Eclipse를 다운로드 받아 설치하면 다음에 "3. CDT 플러그인을 설치한다"를 넘겨도 된다.


3. CDT 플러그 인을 설치한다.

CDT는 C/C++ Development Tool이다. 기존에 이클립스 기반으로 개발하던 사람이라면 C/C++도 Visual Studio와 같은 툴을 활용하지 않고 개발하고자 하는 욕구(?)가 들지도 모르겠다. CDT를 Eclipse에 설치하면 C,C++ 개발이 가능한 환경이 된다.

CDT는 개발하는 툴이지 컴파일러가 아니다. CDT를 설치했더라도 각각 운영체제 기반에서 제공하는 C/C++ 컴파일러와 연결하는 작업은 필요하다. 여기서는 CDT를 Eclipse에 설치하는 방법만 소개한다.

Eclipse 메뉴에서 Help > Install New Software... 를 선택한다.

아래와 같은 화면이 나오면 Add 버튼을 누른다.


http://www.eclipse.org/cdt/downloads.php 에 가면 최신버전(현재 CDT 6.0.x)을 다운로드 받을 수 있는 링크가 소개되어 있다. Eclipse가 Galileo버전이므로 http://download.eclipse.org/tools/cdt/releases/galileo 를 URL로 삼아 플러그인을 설치하면 되겠다.

아래처럼 Add Site창에 Name과 Location을 입력한다. Name은 아무거나 입력하면 된다.


참고로 위처럼 등록하면 Windews > Preferences > Install/Update > Avaliable Software Sites에 아래처럼 등록되어 있다.


이제 Work with 란에 CDT를 입력해보면 금방 등록했던 CDT 정보를 선택할 수 있다. 그럼 아래처럼 나온다. CDT Main Features, CDT Optional Features 모두 Check하고 Next버튼을 누른다.


아래처럼 설치할 목록들이 나온다. Next버튼을 누른다.



아래와 같은 화면이 나오면 I accept the terms of the license agreements를 선택후 Finish 버튼을 누르면 설를 시작한다. 시작이 완료된 다음에는 Eclipse를 재구동한다.



Eclipse가 구동된 다음 C/C++ Perspective를 열어보자. Windows>Open Perspective>Other 를 선택한다. 아래처럼 창이 뜨면 C/C++를 선택한다. 
 

Perspective창에 아래처럼 추가 된것을 확인하자. 이제 Eclipse에서

File > New를 가도 C, C++ 프로젝트를 만들 수 있게 되었다.


4. 간단한 C/C++ 개발해보기

MinGW의 bin 폴더에 보면 gcc, g++등 각종 컴파일 도구가 있다. 이클립스의 CDT환경에서 C/C++로 개발할때는 MinGW의 컴파일 도구를 이용해 컴파일 한다는 사실을 기억하자.

다음과 같이 C++ 프로젝트를 만들어보자.
  • 이클립스 메뉴에서 File > New > C++ Project를 선택한다.
  • 다음 그림과 같이 프로젝트를 만들기 위한 창이 나오면 Project name을 넣고 Project type을 Executable > Hello World C++ Project를 선택한다음 Toolchains를 MinGW GCC로 선택하도록 한다. 이렇게 하면 자동으로 Hello World CPP가 만들어지면서 컴파일은 MinGW의 g++컴파일러를 이용해 컴파일 할 수 있도록 설정 되는 것이다. Next 버튼을 누른다.
  • 간단한 셋팅을 하는데 이 설정에서 중요한 것은 Source 파일은 src 폴더에 들어가게 된다는 것이다. Next 버튼을 누른다.


  • 다음 그림과 같이 Debug, Release 두 버전으로 프로그램 결과를 별 수 있도록 셋팅된다. Finish 버튼을 누른다.

 

이클립스의 Project > Build Automatically가 선택되어 있다면 위처럼 프로젝트를 만들게 되면 자동으로 MinGW의 g++을 찾아 컴파일을 실시하게 된다. 아래와 같은 메시지가 이클립스의 Console창에 나오면 제대로 실행된 것이다.


위 메시지 처럼 컴파일을 하지 못하고  아래처럼 Nothing to build for Test1 메시지가 뜬다면 이것은 수정된 내용이 없으므로 컴파일할 필요가 없다는 것을 의미한다. 대신 Ctrl+B 하면 강제로 컴파일한다.


이 프로젝트는 C++ 프로젝트이므로 gcc 컴파일러가 연결되어야 한다. 만약 컴파일에 실패한다면 Mingw/bin에 gcc.exe를 확인해보자. 만약에 없다면 위에 Mingw 설치하기를 다시 한번 따라해보길 바란다.

실행해보자. 아래처럼 만들어진 프로젝트의 src폴더를 열어 Test1.cpp를 선택한다. 그리고 빨간 박스로 표시된 아이콘을 클릭하거나 Ctrl+F11을 하면 실행할 수 있다.

Console창에 아래처럼 Hello World가 출력된것을 확인하자.

Build Automatically를 체크한 경우에는 코드를 수정하고 저장할 때마다 자동 Build처리된다. 하지만 수동으로도 할 수 있는데 Ctrl+B 또는 아래 그림처럼 망치툴을 클릭해서 Build할 수 있다.



개발시에는 Debug버전과 Release 버전이 있다는 것을 기억하자. 아래 보이는 도구는 현재 개발 환경이 Debug인지 Release인지 결정해 주는 도구이다. Debug는 개발용이고 Release는 외부로 배포할때 사용한다.


실제로 이 도구를 이용해 Debug에서 Release로 바꿔보자. 아래처럼 Release 폴더가 생겨나고 컴파일 결과가 이 폴더안에 만들어진다. 이때부터는 실행할때 Release폴더에 있는 exe파일이 실행되게 된다.


참고로 makefile을 기반으로한 개발을 하고 싶은 경우가 있을 수 있다. 이런 경우에는 C++ 프로젝트를 생성시에 아래 그림처럼 Makefile Project를 선택해서 생성해야한다.

하지만 실제로 이 상태로 프로젝트를 생성해 컴파일하면 Cannot run program "make": Launching failed 메시지가 console창에 보이면서 컴파일이 불가능하다. 이 메시지는 컴파일을 수행할 수 있는 make 명령어를 찾지 못한다는 것을 의미한다. Eclipse에서는 기본적으로 make가 지정되어 있지만 MinGW의 make 명령은 mingw32-make로 다르다. 그러므로 이 문제를 해결하기 위해 mingw32-make.exe를 복사해 같은 폴더에 make.exe로 이름을 바꿔주면 된다. (물론 찾아보면 다른 방법도 있지만 이 방법이 가장 빠르고 쉽다.)

makefile을 이용해 개발해보는 간단한 예제는 다음글을 참고한다.
http://kkamagui.springnote.com/pages/446531


5. 간단한 win32용 프로그램 개발하기
지금까지의 예제는 단순히 Console창에 결과가 나온다. MinGW는 Windows API를 이용한 개발도 지원하므로 앞서 설명한 같은 C++ 프로젝트로 만들고 아래 코드로 변경해도 컴파일이 가능하다.


#include <windows.h>

int WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
        MessageBox(NULL, "Hello in EclipseCDT", "EclipseCDT", MB_OK);
        return 0;
}


실행해 보면 아래와 같은 다이얼로그 창이 나온다.

경험자들에 따르면 Win32 로 개발하는 경우에는 한가지 중요한 C++ 링커 설정을 해야한다고 한다.

먼저 해당 Win32 프로젝트를 선택후(필자의 경우 Test3) 이클립스 메뉴에서 Project > Properies로 들어갑니다. 아래처럼 창이 뜨면 C/C++ Build > Setting으로 들어가 Tool Setting 탭을 선택합니다. 거기에 MinGW C++ Linker>Miscellaneous를 선택해 Linker flags에 -mwindows를 입력한다. 완료하면 Apply버튼이나 OK 버튼을 누르면 적용된다.

이 설정을 해야 군데 군데 "undefined reference"와 같은 에러를 발생시키지 않는다고 한다. 수정했는데도 에러를 띄우면 File->Save all 또는 이클립스 종료후 다시 시작하면 된다.

Windows API 학습을 위해 다음 링크를 참고한다.
http://www.winapi.co.kr/

6. 디버깅 환경 만들기
지금까지 개발환경으로 개발자체는 문제 없지만 디버깅은 할 수 없다. MinGW에 디버깅을 하기 위한 도구가 설치되어야 하는데 이를 가능하게 하는 것이 gdb이다.

먼저 gdb를 다운로드 받자.
http://downloads.sourceforge.net/project/mingw/GNU%20Source-Level%20Debugger/GDB-7.1/gdb-7.1-2-mingw32-bin.tar.gz

압축을 풀고 bin과 share 폴더를 그대로 설치된 MinGW 폴더에 복사해준다. 이것으로 MinGW의 C/C++ 디버깅 환경이 구축되었다.

이제 Eclipse에서 F11 누르거나 아래처럼 벌레모양의 아이콘을 눌러 Debugging을 할 수 있게 된다.


디버깅을 하게 되면 Debug Perspective창으로 바뀌면서 아래처럼 디버깅이 가능해진다.

참고로, 이클립스에서 디버깅 설정은 Run > Debug Configurations에서 할 수 있다. 좌측 리스트에서 C/C++ Application을 선택해 해당 exe를 선택한뒤 우측에서 Debugger 탭을 선택하면 Debugger를 선택할 수 있게 된다.

만약 gdb를 설치했음에도 불구하고 에러를 내면서 디버깅을 할 수 없는 경우 CMD창에서 다음과 같이 입력해보길 바란다.



만약 위처럼 메시지가 나오지 않고 libexpat-1.dll이 없다고 경고창이 나오면 현재 설치한 gdb버전이 libexpat-1.dll과 의존성이 있는 것이다. 이때는 libexpat-1.dll도 함께 다운로드 받아 MingGW/bin에 복사해줘야 한다.

libexpat-1.dll은 아래 링크에서 다운로드 받는다.
http://downloads.sourceforge.net/project/mingw/MinGW%20expat/expat-2.0.1-1/libexpat-2.0.1-1-mingw32-dll-1.tar.gz

다음 글을 참고한다.
http://forums.codeblocks.org/index.php/topic,11301.msg77273.html

7. 정리하며
프로젝트 중에 C와 MySQL을 연동하여 개발할 경우가 있어서 전체 환경설정을 정리한다는 마음으로 글을 적었다. 기존에 나와 있는 많은 글들이 너무 옛날 버전이라서 그런지 지금과 맞지 않는 부분도 있었다. 앞으로 MySQL과 연동하게 되면 관련 내용도 소개해 볼까 한다. 개발에 있어서 환경을 구축하고 적응하는게 반인 것 같다. ^^;


8. 참고글

이클립스(Eclipse) CDT 설치
(Eclipse Galileo) C/C++ Developments User Guide
CDT를 이용한 Windows C/C++ 개발 환경 만들기
Eclipse/CDT
Eclipse Project CDT (C/C++) Plugin Tutorial 1, 2By Brian Lee
이클립스(eclipse)를 이용해서 C/C++ 프로그래밍 환경설정
MinGW + Eclipse 를 이용한 Windows 개발 환경 구현

글쓴이 : 지돌스타(http://blog.jidolstar.com/677)

MS Windows에 Subversion을 설치할 일이 생겨서 설치했다. 이 글은 설치하는 방법 및 테스트를 위한 나만의 기록이다. 다른 방법도 얼마든지 있지만 모두 생략한다.

 

 

Subversion 서버 구축하기

 

1. 설치 목표

Http 프로토콜로 SVN 서비스 지원하도록 서버측 환경을 만드는 것을 목적으로 한다. svn 프로토콜이나 https로 하는 방법은 생략한다. 이 목표를 달성하기 위해 다음과 같은 프로그램을 다운로드 받아 설치해야 한다.

 

- Apache 웹서버 2.2.x

- Subversion 1.6.x

- TortoiseSVN 1.6.x

 

2. Apache 웹서버 설치 하기

http://httpd.apache.org/download.cgi 에서 Openssl을 지원하는 Win32 Binary 설치프로그램을 다운로드 받아 설치한다. 현 최신 버전인 apache_2.2.11-win32-x86-openssl-0.9.8i.msi를 받아 설치함

 

3. Subversion 서버 설치

http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=8100 에서 Apache 2.2 모듈을 포함하는 최신 SVN 바이너리 프로그램을 받는다. 현 최신 버전인 Setup-Subversion-1.6.3.msi를 받아 설치함

 

4. TortoiseSVN 설치 하기

이 프로그램은 클라이언트에서 주로 사용한다. 콘솔창에서 svnadmin create와 같은 명령어를 이용해 저장소 만드는 불편함을 없애기 위해 설치한다.

 

http://tortoisesvn.net/downloads 에 가서 다운로드 받아 설치한다. 현 최신 버전인 TortoiseSVN-1.6.3.16613-win32-svn-1.6.3.msi를 설치하면 된다.

 

5. SVN 저장소(Repository)를 생성한다.

저장소를 만들기 위해svnadmin create 명령어를 콘솔창에서 하는 방법도 있지만 방금 설치한 TortoiseSVN을 이용하면 쉽게 만들 수 있다. 먼저 아래 그림처럼 임의의 위치에 저장소 폴더를 만든다. 그리고 오른쪽 마우스 버튼을 눌러 컨텍스트 메뉴에서 TortoiseSVN을 선택한 뒤 Create repository here를 선택하면 된다. 그럼 The repository was successfully created 메시지가 뜨면서 저장소가 만들어진다. 테스트를 위해 저장소를 C:\svn 에 만들었다.

 

 

 

만들어진 저장소에 들어가보면 아래와 같은 내용이 만들어진 것을 확인할 수 있겠다.

 

conf 폴더 안에 있는 authz, passwd, svnserve.conf를 설정하여 이 저장소에 접근할 수 있는 권한 및 운영제반 사항을 설정할 수 있다. http 프로토콜로 서비스를 할 것이므로 authz 설정만 하면 된다. 즉, passwd와 svnserve.conf는 건드릴 필요가 없다. 이들은 svn프로토콜을 이용하면 반드시 설정해야한다.  설정 방법은 다음에 설명한다.

 

6. Apache 서버에 SVN 모듈 등록

 

Subversion의 설치 폴더(C:/Program Files/Subversion)에 bin폴더에 있는 mod_dav_svn.so와 mod_authz_svn.so 파일을 Apache의 modules 폴더에 복사한다.

 

그 다음 Apache 설치 폴더에 conf 폴더에 있는 http.conf를 아래와 같이 편집한다.

 

# 아파치 모듈 설정 부분에서 다음 부분의 주석을 푼다.
LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so

 

# 다음과 같은 SVN 모듈을 추가한다.
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

 

7. Apache 가상 호스트 설정

 

가상호스트는 말그대로 가상적인 호스트를 의미한다. 앞으로 만들 SVN 저장소에 접근할 수 있도록 가상으로 정한 주소를 이용해 Apache에 설정하는 것을 의미한다.

 

여기서 Apache 2.2 버전을 설치했으므로 http.conf에 아래 부분 처럼 가상 호스트 관련 설정파일을 포함하도록 되어 있다. Include 앞에 #을 지워준다.

 

# Virtual hosts
Include conf/extra/httpd-vhosts.conf

Apache 설치폴더에서 conf/extra/httpd-vhosts.conf 를 열어서 다음과 같이 추가한다.

 

############################################
# Sample 테스트용 SVN 가상호스트
############################################
<VirtualHost *:80>
    <Location /svn/test>
        DAV svn
        SVNPath "C:\svn"
        #SVNParentPath "C:\svn"
        #SVNListParentPath On
        AuthType Basic
        AuthName "SVN Test Repository"
        AuthUserFile "c:\svn\htpasswd"
        AuthzSVNAccessFile "c:\svn\conf\authz" 
        Require valid-user
    </Location>
</VirtualHost>

위 설정은 http://주소/svn/test 로 접근하게 되면 C:\svn 을 SVN 저장소 위치로 찾게 해준다는 의미가 내포되어 있다.

 

AuthUserFile은 사용자 목록 위치이며 AuthzSVNAccessFile은 접근권한 파일을 의미한다. 주석 처리된 SVNParentPath는 각 프로젝트의 저장소 디렉토리가 아닌 그 바로 위의 디렉토리를 뜻한다. http://주소/svn/test로 접속하여 C:\svn 뿐 아니라 http://주소/svn/test/other 로 하면  C:\svn\other 로도 접근이 가능해지는 것이다.

 

Require valid-user는 인증된 사용자만 사용할 수 있다. 만약 체크아웃(check-out)은 아무나(Anonymous)가 할 수 있게 하고 커밋(commit)은 지정된 사용자만 할 수 있게 하려면 Require valid-user 대신 아래처럼 사용할 수 있다.

 

############################################
# Sample 테스트용 SVN 가상호스트
############################################
<VirtualHost *:80>
    <Location /svn/test>
        DAV svn
        SVNPath "C:\svn"
        #SVNParentPath "C:\svn"
        #SVNListParentPath On
        AuthType Basic
        AuthName "SVN Test Repository"
        AuthUserFile "c:\svn\htpasswd"
        AuthzSVNAccessFile "c:\svn\conf\authz"  
        <LimitExcept GET PROPFIND OPTIONS REPORT>
            Require valid-user
        </LimitExcept>
    </Location>
</VirtualHost>

 

8. Apache 사용자 인증 파일 생성

 

위에서 AuthUserFile의 경로를 설정할 것을 보았을 것이다. 이제 그 파일을 만들자.

 

http 프로토콜을 사용하여 SVN에 접근하므로 Apache의 htpasswd를 이용해 사용자 인증을 한다.

 

htpasswd 파일을 생성은 다음과 같이 한다.

{아파치 설치 폴더}\bin\htpasswd -c htpasswd 사용자계정

 

htpasswd 파일에 사용자 추가 명령

{아파치 설치 폴더}\bin\htpasswd htpasswd 사용자계정

 

위와 같은 방법으로 사용자 계정을 추가해보자.

C:\svn\conf>C:\Apache\Apache2.2\bin\htpasswd -c htpasswd jidolstar
Automatically using MD5 format.
New password: ********
Re-type new password: ********
Adding password for user user1

만들어진 c:\svn\htpasswd 파일을 보면 아래와 같이 추가 되어 있는 것을 확인할 수 있을 것이다.

 

jidolstar:$apr1$IswHvHiJ$rBcOZc8bs59IUJIC/hWgO.

 

중요한 것은 -c는 한번만 사용한다. 안그러면 이전 내용이 지워져 버린다.

 

9. Subversion 접근 권한 파일 설정

c:\svn\conf 폴더에 보면 authz, passwd, svnserve.conf 파일이 있다. svn 프로토콜로 접근하지 않을 것이므로 authz만 수정하면 된다.

 

다음은 authz 파일 접근 권한 설정의 예이다.

 

[groups]
group1 = user1,user2
group2 = user3,user4,user5

 

[/]
* = r

 

[/project1]
@group1 = rw
@group2 = r

 

[/project2]
@group1 = rw
@group2 = r

무엇을 의미하는가? 2개의 그룹이 있다. 그룹 group1에는 사용자 1,2가 있고 그룹  group2에는 사용자 3,4,5가 있다. 이들은 http://주소/svn/test로 접근했을때 모두 read할 수 있으나 write권한은 없다. http://주소/svn/test/project1 에는 group1은 read/write를 다할 수 있으나 group2는 read만 할 수 있다. project2는 그 반대이다. 이런 식으로 svn에 접근 권한을 설정할 수 있는 것이다. 앞서 설명했지만 이 파일은 앞서 수정했던 가상 호스트 설정에서 Apache가 실행될 때 로드되어 진다.

 

본인은 앞서 jidolstar 아파치 계정을 하나 만들었으므로 다음과 같이 authz를 설정했다.

 

[groups]
group1 = jidolstar

 

[/]
* = rw

 

10. 웹브라우저에서 SVN 서버에 http로 접근하기

아래와 같은 윈도우 맨 우측아래 트레이 아이콘을 두번 클릭해 창이 뜨면 아파치를 구동하자. 미리 구동되어 있는 경우에는 새로운 설정을 로드해야하므로 stop했다가 다시 start한다. 위 설정을 잘 했다면 에러없이 구동이 될 것이다.

 

먼저 아파치가 잘 구동되는지 확인한다. 아래와 같이 창이 뜨면 정상이다. (참고로 이 페이지는 {아파치 설치경로}\htdocs에 있는 index.html 파일이다.)

 

 

이제 http://localhost/svn/test 로 접속해보자. 아래와 같은 인증창이 나오면 등록했던 사용자계정정보를 넣자.

 

인증이 완료되면 아래와 같은 화면이 나왔으면 성공이다.

 

이것으로 SVN 서버 구축을 모두 완료했더 테스트 까지 마쳤다.

 

여기서는 c:\svn에 저장소를 만들었지만 사람마다 다른 곳에 저장소를 만들고 싶을 것이다. 원하는 곳에 저장소를 만들어 테스트를 꼭 해보길 바란다. 가상호스트는 중복으로 만들 수 있으니 여러개의 저장소를 만드는 것도 가능하다.

 

 

Subversion 서버에 HTTP로 접속해 사용해 보기

 

SVN 서버는 모두 구축이 되었다. 이제 개인 소스 관리를 위한 테스트를 해보자. 만약 다른 컴퓨터에서 테스트 해보고 싶다면 그 컴퓨터에 TortoiseSVN 을 설치하길 바란다.

 

1. 체크아웃(check-out)

먼저 SVN 서버에 c:\svn에 있는 자료를 첫번째로 가져오는 일을 해야할 것이다. 이때 하는 일이 check-out이다. 바탕화면에 TestSVN 폴더를 만들어보자. 그런다음 아래 그림처럼 SVN Checkout를 실시한다.

 

그럼 아래처럼 Checkout 창이 뜬다. 우리는 http://localhost/svn/test 로 접속해서 이전에 만들어진 저장소 C:\svn에 있는 내용을 읽어올 수 있다고 했다. 아래처럼 URL of repository에 이 URL을 적고 OK버튼을 누른다.

 

 

브라우져에서 접속할때와 마찬가지로 인정절차가 필요하다. username과 password를 넣자. 다음부터 이 절차를 생략하고 싶다면 Save authentication을 check한다.

 

 

아래와 같이 Completed 가 나오면 완료가 된것이다. 지금은 아무 내용이 없다. ^^;

 

바탕화면에 만든 TestSVN 폴더에 보면 .svn 이 생성된다. .svn은 TestSVN이 접속한 저장소에 대한 정보를 가지고 있다. 앞에 점(.)이 있기 때문에 폴더옵션에서 숨김 파일 및 폴더 표시를 해주어야 보인다. 그렇지 않으면 TestSVN은 빈폴더처럼 보일것이다.

 

 

2. 커밋(commit)

체크아웃 한 소스를 수정, 파일 추가, 삭제 등을 한 뒤 저장소에 저장하여 갱신 하는 것이다. 커밋을 하면 전체 리비전이 1 증가하게 된다.

 

해보자. 앞에서 체크아웃한 TestSVN 폴더 내로 가서 tags, trunk, branches 폴더를 만든다. 또 각각의 폴더안에 tags.txt, trunk.txt, branches.txt를 만들어 본다. ? 표가 표시된 것은 이 파일이 어떤 상태인지 모른다는 것을 의미한다.

 

모두 선택한 뒤 아래처럼 TortoiseSVN > Add를 선택해서 커밋할 목록으로 등록한다.

 

이제 ?표에서 벗어나 + 표시로 바뀌었다. SVN 서버로 커밋할 준비가 된 것이다.

 

모두 선택한 뒤 아래 화면처럼 SVN Commit을 실시한다.

 

아래 그림의 창이 뜨면 SVN으로 전송할 목록이 선택되어 있고 Message를 남길 수 있게 된다. 이런식으로 만들어진 자료를 SVN로 전송할 수 있다. 지금은 추가된 내역만 올라가지만 만약 폴더 이름이 바뀌거나 위치를 옮기거나 삭제 되었거나 했을때는 added가 아니라 deleted, moved 이런 표시가 붙을 것이다.

 

아래 화면처럼 추가했던 + 표시는 없어지고 체크표시가 되었다. 정상적으로 SVN 서버에 올라간 것이다.

 

trunk를 선택하고 오른쪽 마우스 키를 눌러 Tortoise > show log를 보자. 아래처럼 Revision 번호가 1로 되어 있는 것을 확인할 수 있으며 그에 대한 Message와 함께 Commit된 것들도 확인할 수 있다.

 

 

TestSVN/trunk/trunk.txt 파일을 열어 내용을 입력하고 저장해보자. 아래처럼 !(느낌표) 표시가 될 것이다.

 

이것을 커밋해보자. 기존에 있는 것을 수정했으므로 상태는 modified가 되어 있다. 커밋하면 이제 리비전(revision)은 1에서 2로 바뀌게 된다.

 

브라우저에서도 확인해보자. http://localhost/svn/test 로 접속해서 아래와 같은 화면을 확인하자. add, modify 두번 처리해서 커밋했으므로 Revision이 2이다.

 

 

3. 업데이트(Update)

 

체크아웃을 해서 소스를 가져 왔더라도 다른 사람이 커밋(추가, 삭제, 이동, 변경등)을 하였다면 소스가 달라졌을 것이다. 이럴 경우 업데이트를 하여 저장소에 있는 최신 버전의 소스를 가져온다. 물론 바뀐 부분만 가져온다.

 

다른 사람이 변경한 내용이 있더라도 내가 변경한 내용이 따로 있다면 그 파일이나 폴더는 무시한다. 그러므로 항상 작업을 할 때는 먼저 업데이트를 하고 난다음 수정, 추가, 삭제, 이동의 작업을 완료후에 커밋해야 다른 사람 변경내용과 충돌이 일어나지 않는다. SVN은 겹쳐서 작업해서 서로 소스가 달라지는 경우 충돌보고를 해주기 때문에 안심하고 작업할 수 있다.

 

업데이트 방법은 매우 단순하다. 아래 그림처럼 SVN Update만 해주면 된다.

 


정리하며

 

윈도우 환경에서 Subversion 서버를 구축하는 방법과 사용법을 간단히 논했다. 사실 아주 일부분만 설명되어 있는 것이고 실무에서는 더욱 다양하게 쓰이게 된다. 개발자의 경우 TortoiseSVN을 이용한다기 보다 Eclipse나 Flash Builder 등에 SVN 플러그인을 설치하여 개발 코드 관리를 하는 것처럼 사용한다.

 

외부 컴퓨터에서 접속이 가능하게 하려면 반드시 80번 포트의 방화벽을 해제해주어야 한다.

 

쉬운 내용이지만 한번 정도는 정리할 필요가 있다고 생각했다. 막상 작성해보니 내용이 너무 길다. ^^;

 

 

글쓴이 : 지돌스타(http://blog.jidolstar.com/552)

 

[Intel&AMD] MacOSX Leopard Install Guide

 

Min의 허접한 가이드 2탄 입니다.


Intel&AMD 입니다. (사실 별다른건 없어요...)


 

Intel&AMD MacOSX Leopard Install Guide

 

출처 : x86osx.com

 

Mac 세계에 빠져보자. ^^;



FDT를 이용해 순수 ActionScript 3.0 코딩의 세계로 빠져보기 위해 설치했다. Flex 프레임워크가 너무 무거워 ActionScript 3.0 코드로 주로 작성하게 될터인데 Flex Builder는 사용하기에 너무 부족한 면이 있는 것 같다. 그렇다고 해본적도 없는 Flash를 할 수 있는 것도 아니고… 그래서 선택한 것이 FDT이다.

 

http://fdt.powerflasher.com/

 

위 사이트에 가면 FDT를 다운로드 받을 수있다. 일단 30일 체험판이 있으니 사용해보고 정말 쓸만하다면 구입도 고려해볼 예정이다.

 

설치하고 실행하자마자  JVM terminated 에러가 떳다

 

 

 

이런 경우에는 설치 디렉토리내에 있는 자신의 컴퓨터 사양에 맞게 FDT.ini를 약간 수정하면 된다.

 

-vmargs
-Xmx512m
-XX:MaxPermSize=128m

 

잘 실행 된다. ^^

 

외관이 완전 이클립스다. Flex Builder 처럼 Eclipse를 가지고 만들었으니 당연하겠다.

 

 

 

Preferences를 살펴봤다. FDT에도 Flex SDK를 그대로 사용하는 것을 확인할 수 있었다. 더불어 Flex Builder에서는 못하는 AS2 코딩도 가능해진다.

 

 

FDT의 Code Style에서 Formatter를 보니 Braces({,})사용하는 방식이 맘에 안든다. 내가 사용하는 방식으로 바꿔야겠다. 아래 그림에서 Braces 탭을 선택해서 수정하면 되겠다.

 

 

 

FDT의 Core Libraries를 보니깐 여기에서 라이브러리를 등록할 수 있다는 것을 확인할 수 있었다.

 

 

새로운 Flash 프로젝트를 만들어보겠다.

 

 

 

Flash Player 9이하 환경에서  ActionScript 3.0으로 개발할 것이므로 Flex_3_SDK_0_Pure를 선택하면 되겠다.

 

역시 순수 ActionScript 3.0으로 개발할때 필요한 playerglobal.swc만 라이브러리로 등록된다.

 

 

 

직접 해보니깐 Flex Builder 3.0에서 보지 못했던 맘에 드는 구석이 많은 것 같다. 뭐 이미 FDT의 장점에 대해서는 구구절절 말하기 귀찮긴 하다. 사실 이제 처음 사용한거라 ㅎㅎ

 

 

FDT는 유료의 압박이 있는데 무료인 FlashDevelop 프로그램에 대해서도 관심을 가져볼려고 한다. 물론 FDT보다는 못하겠지만 많은 개발자가 즐겨 사용하는 것으로 알고 있기 때문에 관심이 간다.

 

선택의 폭이 넓어 좋다. ^^

 

 

 

+ Recent posts