- notice 스킨변경~
[C와 C플러스플러스]검색결과, 8건
[Eclipse] CDT + cygwin에서 GDB디버그시 소스파일을 못 찾는 문제점 수정.
Posted in C와 C플러스플러스 // Posted at 2008/07/02 19:42참 셋팅도 힘들군요.
아무 셋팅을 안했다면 디버깅을 하게 되면 아래와 같은 경고문이 뜰껍니다.


Can't find a source file at "/cygdrive/d/~~~~~.c
Locate the file or edit the source lookup path to include its location.
저걸 보면서 느낀점은 "아놔! 저기에 파일 있잖아! 미췬 이클립스야!!!" 라는 생각이 들었는데요.
자세히보면 /cygdrive/d/....... 우리가 사용하는 윈도우는 d:/ 이겠지요.
저걸 매핑하는 것을 이클립스에서 지원합니다.
Window -> Preferences -> C/C++ -> Debug -> Common Source Lookup Path라는 것이 있습니다.
여기서 add버튼을 클릭해서 Path Mapping을 선택합니다.
추가된 것을 선택하고, Edit를 합니다.
이름은 아무렇게나 써주시고, Add를 합니다.
Compilation Path에 /cygdrive/d(c드라이브는 c일껍니다) 라고 적고,
Local file system path에다가는 실제 드라이브 경로 (ex - d:\. c드라이브면 c라고 해야할 껍니다 ^^)
그러면 이제 잘 찾네요.
원격 디버깅도 해봐야하는데-_-;
저는 Visual C++ 를 손땐지 너무 오래되서 다 까먹었는데-_-; 갑자기 윈도우용 애플리케이션이 필요했어요^^
그래서 JAVA로 만들라고 했는데 친구한테 물어보는 중에 자기가 만들어 놓은게 있다면서 보내주더니 컴파일해보니 안되더군요. 제껀 Visual C++ 2008버전이였고, 친구가 만들었을 때는 뭐 다른 버전이었나봅니다.
그래서 친구가 원격으로 약 한시간정도 삽질한 결과 완벽하게 포팅을 하더군요-_-;(고마워 밥쏘마-_-;)
이제 저는 프로그램을 적용하려고 Release모드로 빌드를 하고 생성된 exe파일을 해당 컴퓨터에 복사를 하고 실행을 했습니다.
"응용 프로그램 구성이 올바르지 않기 때문에 이 응용 프로그램을 시작하지 못했습니다. 이 문제를 해결하려면 응용 프로그램을 다시 설치하십시오."
라는 것을 보았습니다. 음....대충보니 라이브러리같은 게 없어서 그런듯한데요.
해결 방법은 2가지가 있답니다.
1. 인스톨러를 만드는법-_-; 이건 안해봤으니 패스-_-;
2. 해당 라이브러리를 같은 경로에 복사하는 법 ^^
간단합니다.
C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT 이 경로에 있는 모든파일을 다 복사해서 실행(exe)파일에 같이 넣어두면 돼요 ^^
Microsoft.VC90.CRT.manifest, msvcm90.dll, msvcp90.dll, msvcr90.dll 요고 4개만 복사하면 돼요 ^^
아.....자꾸 까먹어요. 포인터에 대한 개념이 점점 사라지고 있는 느낌이네요-_-;
얼마전 동적할당을 할 일이 생겨서 포스팅해둡니다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NUM 2 /* 동적으로 할당할 수 */
#define LENGTH 80 /* 문자열길이 */
int main(void) {
char **id;
int i;
id = (char **)malloc(NUM * sizeof(char *));
for (i = 0; i < 2; i++) {
id[i] = (char *)malloc(LENGTH * sizeof(char));
}
strcpy(id[0], "mudchobo");
strcpy(id[1], "idoori");
for (i = 0; i < 2; i++) {
printf("%s\n", id[i]);
}
return EXIT_SUCCESS;
}
아.....저렇게 하는 거군요-_-;
-
-
-
IRIS
저도 지나가다 씁니다만..
저건 엄연히 2차원 배열은 아닌겁니다.
만약 2차원 배열이라면
memset(array, 0, sizeof(array));
의 구문으로 모든 배열 값들을 초기화할 수 있어야죠.
(하지만 위 문장에 id를 넣었다가는 할당한 메모리만 날리는 꼴이 되겠지요.)
즉 각 차원의 모든 요소들이 인접해야 'x차원 배열'이라고 부를 수 있는 겁니다.
2차원 배열을 동적할당한다는 글을 보고 신기술인가? 깜짝놀라서 들어와봤네요. ㅎㅎ
그냥 나중에 필요할 것 같아 적어 놓습니다.
#include <stdarg.h>
#include <stdio.h>
void Display(char* content, ...) {
if (content == 0)
return;
va_list arg;
char result[256] = "";
va_start(arg, content);
vsnprintf(result, sizeof(result), content, arg);
printf("%s", result);
va_end(arg);
}
int main() {
Display("%s", "mudchobo");
printf("\n");
Display("%s %s", "mudchobo", "darkness");
printf("\n");
return 0;
}
C공부를 다시 해야할 것 같아서 IDE를 설치해야할 일이 생겼습니다. Visual Studio로만 C/C++을 해온 저는 유닉스 환경에서 해야해서 다른 IDE를 찾고 있었습니다. 이클립스를 다운 받을 때 C/C++용도 있었던 것 같았습니다.
그래서 이클립스 홈페이지가니 있더군요. 여기저기 수소문 끝에 유닉스환경에서 할 수 있는 C프로그래밍을 윈도우에서도 구축할 수 있더군요. 이런게 있을 줄이야...
우선 이클립스를 받습니다.
http://www.eclipse.org/downloads/
여기 사이트를 들어가시면 Eclipse IDE for C/C++ Developers 라고 있습니다.
운영체제에 맞는 것을 받으시구요. Linux와 MacOS도 지원하는군요!
받은다음에 적당한 폴더에 압축을 풉니다.
자 그다음 gcc, make 등을 구해야하는데 두가지 종류가 있더군요.(리눅스는 안해줘도 될꺼같군요)
Cygwin랑 MinGW 가 있는데 MinGW로 해보겠습니다. (Cygwin은 이걸로 만든 실행파일을 실행할때 dll파일이 필요하다고 하더군요)
이곳에서 MinGW를 받습니다.
http://www.mingw.org/download.shtml
받은 뒤 실행하면 다음신공하다보면 뭐 설치할 꺼냐고 묻는데 전 잘몰라서 c관련된 컴파일러는 다 설치했습니다. make랑 g++랑 objective c 컴파일러같은거 이거 3개 체크하고 설치했습니다.
그런다음에 패스를 잡아줘야합니다. gcc랑 make 등의 파일이 어디서든 실행이 되어야합니다.
패스잡는것은 비스타기준입니다.
컴퓨터(오른쪽버튼누른뒤 속성) -> 고급시스템설정 -> 고급탭에서 환경변수 클릭!
XP에서도 비슷하게 속성누르면 있을껍니다.
집에 알집이 깔려있다면 위에 알집이 PATH로 잡혀있을껍니다. 요고이 지워줍니다. 그리고 이스트소프트를 막 욕합시다.
시스템변수에 Path를 찾습니다. 그다음 MinGW/bin폴더를 패스를 잡아줍니다.
ex) ......;C:\MinGW\bin //c:\MinGW는 MinGW설치폴더
패스가 제대로 잡혔는지 보려면 시작 -> cmd를 실행해서 gcc를 실행해봅시다.
gcc: no input files라고 나오면 잘 잡힌겁니다.
그리고 이클립스에서는 make.exe파일을 make할 때 쓰는데 MinGW는 mingw32-make.exe파일이 make파일입니다. 그래서 이름을 변경하던가 이클립스 설정을 변경하던가 합니다.
첫번째 방법은 mingw32-make.exe파일을 똑같은 폴더에 복사해서 새이름으로 make로 저장합니다.
두번째 방법은 이클립스에서 변경하는 방법입니다.
Window -> Preferences -> C/C++ -> New CDT project wizard -> Makefile project를 보면
둘중에 하나만 하면 됩니다.
이제 설정은 다 됐습니다. 언제나 그렇듯이 설정이 끝나면 헬로우 월드를 찍어봅시다-_-;

Toolchain은 MinGW로 선택을 합시다. 프로젝트이름은 HelloWorld로...-_-;
HelloWorld프로젝트이름에 오른쪽버튼을 눌러서 New -> Source File 해서 HelloWorld.c 파일을 생성합시다.
저렇게 적읍시다. 아 그리고 마지막 } 이거다음에 한칸 띄워주고 그다음칸을 한칸더 생성해줍시다. 그냥 }스페이스바하고 엔터 하고 저장합시다. 안그러면 no newline at end of file 라는 워링이 뜹니다-_-;
검색해보니 뭐 무슨 어쩌구 설명을 하는데 잘모르겠습니다-_-;
컴파일 단축키로 컴파일해봅시다. 저장하고 Ctrl + B를 누릅시다.
컴파일이 완료되면 run단축키인 Ctrl + F11을 누릅시다.
그러면 아래에 Console탭에 Hello World! 라고 뜰껍니다.
컴파일할 때 object파일인 *.o도 만들고 윈도우실행파일인 *.exe도 만들어줍니다.
-
-
-
docyacc
저는 똑같이 했는데도
마지막에 ctrl + f11하면
lanch failed no bineries
라고 뜨네요 ㅠㅠ -
docyacc
아.. 빌드도 제대로 되지 않았네요..
**** Build of configuration Debug for project hello ****
**** Internal Builder is used for build ****
gcc -O0 -g3 -Wall -c -fmessage-length=0 -ohello.o ..\hello.c
gcc: installation problem, cannot exec `cc1': No such file or directory
Build error occurred, build is stopped
Time consumed: 94 ms.
뭐가 잘못된 걸까요 -_ㅠ-
머드초보
음 제가 보기에는 gcc가 설치가 안된듯 싶습니다. MINGW에서 g++컴파일러를 체크하셨는지요? 아니면 Path가 안잡혀있던가 그런거 같은데요. gcc를 실행하지 못하는 듯의 에러로 보입니다^^
-
-
-
머드초보
mingw말고 cygwin도 있는데 이게 더 좋은 것 같아요.
둘의 차이점이 좀 있다고 하는데^^
설치 방법은 동일해요 ^^
방문해주셔서 감사해요 ^^
헉....트랙백 따라가니 cygwin으로 하셨네요 ^^
-
-
도막
안녕하세요!! 이클립스로 c언어 사용해 보려고 검색하다가 들렀습니다~
유용한 정보가 됬습니다. 감사합니다~
근데 디버깅 하는 법도 좀 알려주시면 안될까요 ^^;;
부탁드립니다 ㅠㅠ-
머드초보
우선 gdb를 설치하셔야하는데 그것도 같이 설치하셨나요?
mingw로는 안해보고 cygwin으로는 해봤거든요.
cygwin에서 gcc랑 gdb, make 등등 컴파일에 필요한 것 설치하시구요.
http://mudchobo.tomeii.com/tt/284
디버깅할 때 위처럼 문제점이 발생하면 위처럼 해결해주면 돼요 ^^
-
-
KG
안녕하세요 프로그래밍을 이제막 배우기시작한 초보입니다.
제가 환경이 MAC이라서 그런데 컴파일 프로그램은 어떤걸 써야하나요?
그리고 디버깅은 어떻게 하는지 갑자기 배우려니 어렵네요..^^ -
-
HC
안녕하세요~
항상 비주얼로만 C 작업을 하다가
이제 막 이클립스를 이용하여 작업할려는 초보자입니다 ㅠ
머드초보님 말씀대로 따라서 했는데..
빌드가 잘 안되네요..
Description Resource Path Location Type
undefined reference to `WinMain@16' Hello line 0, external location: mingw/lib/libmingw32.a(main.o):main.c: C/C++ Problem
이유가 먼가요 ㅠ?-
머드초보
음...C작업엔 Visual Studio가 더 좋지 않나요?-_-
근데 아래와 같은 에러는 저도 안해봐서 모르겠네요.
에러 내용을 보내 윈도우프로그래밍을 하시려고 한 것 같은데, 저도 안해봐서 잘 ㅠㅠ
라이브러리를 못찾는 것 같기도 하고....
make파일을 조쿰 보시면....ㅠㅠ
-
-
HC
와우 빠른 답변 ㅎㅎ
그런가요..
그냥 Hello 출력할려했는데..
똑같이 했는데 왜 이럴까나 ㅠ
아 저는 학생인턴인데.. 이클립스로 작업하라 하더라고요 ` ㅅ`ㅋ
막막하네요 ㅠ-
머드초보
그냥 Hello World출력하는 것이라면 위처럼 하면 될텐데 ㅠㅠ
MinGW말고, cygwin이라는 것도 있는데, 이걸로도 한번 해보세요^^
-
-
크렘
**** Internal Builder is used for build ****
gcc -oHelloWorld.exe HelloWorld.o
/mingw/lib/libmingw32.a(main.o):main.c
.text+0xd2): undefined reference to `WinMain@16'
collect2: ld returned 1 exit status
Build error occurred, build is stopped
Time consumed: 140 ms.
이거 도대체 왜뜰까요 ㅜㅜ 패스도 제대로 잡았고 cmd 에서 gcc g++도 다 잘 되는데 말이죠..
도와주세요 ㅜㅜ -
-
크렘
다시 하니깐 안되네요 -ㅁ- 지맘대로 컴파일 오류난담에 껏다 켜면 되고 다시 새로만들어서 그상태로 컴파일하면 또 안되고 ....
충격 ... 저장 -> 빌드 -> 실행 순으로 해야하는 군요
3개중 하나라도 빼먹으면 안되는 ..
저장을 안하고 있었던 ....-
머드초보
MinGW말고 Cygwin으로도 한번 해보시겠어요?
MinGW와 동일한 컴파일러입니다.
unix용 어플을 windows용으로 변환한 것으로 알고 있습니다^^
-

