음...저도 참 몰랐는데, 이게 윈도우 환경이다보니....-_-;
참 셋팅도 힘들군요.

아무 셋팅을 안했다면 디버깅을 하게 되면 아래와 같은 경고문이 뜰껍니다.
사용자 삽입 이미지

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라고 해야할 껍니다 ^^)

그러면 이제 잘 찾네요.
원격 디버깅도 해봐야하는데-_-;

 
Posted by 머드초보

댓글을 달아 주세요

  1. 2014.10.15 15:59  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

 

저는 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개만 복사하면 돼요 ^^
 
Posted by 머드초보

댓글을 달아 주세요

  1. BlogIcon 장현준 2008.03.05 09:58  댓글주소  수정/삭제  댓글쓰기

    또는 static link로 해서 배포하면 되지~ㅎㅎ

  2. 봉봉 2010.12.12 21:08  댓글주소  수정/삭제  댓글쓰기

    이런 방법이 있었네요.
    컴공과 1학년 학생인데 프로그램 만들어서 발표해야 하는데 exe 실행하니 저런오류 떠서 어쩔 수 없이 노트북 들고 왔어요 ㅋㅋ

 

아.....자꾸 까먹어요. 포인터에 대한 개념이 점점 사라지고 있는 느낌이네요-_-;

얼마전 동적할당을 할 일이 생겨서 포스팅해둡니다.










[code]#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;
}
[/code]
아.....저렇게 하는 거군요-_-;

 
Posted by 머드초보

댓글을 달아 주세요

  1. BlogIcon 필유 2008.03.10 20:29  댓글주소  수정/삭제  댓글쓰기

    지나가다 보고 갑니다만... 사용후에는 free를 해줘야겠죠? ^^

  2. IRIS 2010.08.27 14:41  댓글주소  수정/삭제  댓글쓰기

    저도 지나가다 씁니다만..
    저건 엄연히 2차원 배열은 아닌겁니다.
    만약 2차원 배열이라면
    memset(array, 0, sizeof(array));
    의 구문으로 모든 배열 값들을 초기화할 수 있어야죠.
    (하지만 위 문장에 id를 넣었다가는 할당한 메모리만 날리는 꼴이 되겠지요.)
    즉 각 차원의 모든 요소들이 인접해야 'x차원 배열'이라고 부를 수 있는 겁니다.
    2차원 배열을 동적할당한다는 글을 보고 신기술인가? 깜짝놀라서 들어와봤네요. ㅎㅎ

    • mindbomb 2010.10.08 08:45  댓글주소  수정/삭제

      저 역시 지나가다..

      일반적으론 배열의 배열 형태로 2차원 배열을 동적할당하지만
      열의 크기가 고정되어 있다면 연속적인 2차원 배열의 동적할당이 가능합니다.

      예를들어
      int (*p)[3]= (int(*)[3])malloc(n*3*sizeof(int));
      이 경우
      n*3 크기의 연속적인 2차원 배열이 생성됩니다.
      p가 배열주소상수가 아니라 포인터변수이며 그때문에
      p가 가리키는 공간의 크기는 바인딩되어 있지 않다는 점을 빼곤
      int p[n][3]과 동일합니다.
      (memset(p,0,sizeof(p))형태로 초기화 못함, 허나 연속적이기 때문에 memset(p,0,n*3*sizeof(int))로는 초기화 가능.)




      참고로 배열과 포인터의 차이를 말씀드리자면

      N*M크기의 순수한 2차원배열p가 있다고 할때
      p[y][x]=0;

      *(p+y*M*sizeof(int)+x*sizeof(int))=0;
      형태의 연산을 수행하는 어셈블코드로 생성되는데
      (이때 덧셈은 포인터 덧셈이 아니라 산술 덧셈인 것에 유의)
      소스코드 상엔 M값을 명시하지 않았음에도 배열을 선언한 순간 배열의 가로 M 크기가 결정되기 때문에 컴파일러는 이를 상수로 처리 할 수 있습니다.

      허나 p가 포인터의 포인터일 경우
      p[y][x]=0;은 (p[y])[x]=0;으로써 다음과 같이 변환됩니다.(이때 덧셈은 포인터 덧셈이 아니라 산술 덧셈인 것에 유의)
      *(*(p+y*sizeof(int*))+x*sizeof(int))=0;


      다음과 같은 코드가 에러가 나는 이유는 이런 차이에서 오는 것이라 할 수 있죠...
      int a[3][3];
      int **p;
      int *p2[3];
      p=a; //컴파일에러:인덱스 처리 방법이 다르므로 2차원 배열 주소를 포인터의 포인터로 형변환 할 수 없음.
      p2=a; //OK:에러발생안함
      p2[y][x]는 (p2[y])[x]으로.. 괄호 안부분은 포인터의 인덱스계산방식, 괄호바깥쪽은 배열의 인덱스계산방식을 따르게 됨. 따라서 p2[y][x]의 주소는 (p+y*sizeof(int[3]))+x*sizeof(int)로 계산되고,
      a[y][x]는 p+y*3*sizeof(int)+x*sizeof(int)로 계산되는데... 이때 sizeof(int[3])과 3*sizeof(int)는 같은 값을 가지므로 동일한 인덱스 계산법인셈. 따라서 형변환이 가능함.

    • 머드초보 2010.11.05 19:28  댓글주소  수정/삭제

      아흑.....
      좋은 강의 감사합니다ㅠㅠ
      제가 c언어는 잘 몰라서ㅠㅠ
      감사해요~

 















그냥 나중에 필요할 것 같아 적어 놓습니다.

[code]
#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;
}
[/code]

 
Posted by 머드초보

댓글을 달아 주세요

 


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를 보면

사용자 삽입 이미지

중간에 빨간상자부분이 있는데 저 부분을 mingw실행파일에 맞게 바꿔주면 됩니다.

둘중에 하나만 하면 됩니다.

이제 설정은 다 됐습니다. 언제나 그렇듯이 설정이 끝나면 헬로우 월드를 찍어봅시다-_-;
사용자 삽입 이미지

Toolchain은 MinGW로 선택을 합시다. 프로젝트이름은 HelloWorld로...-_-;

HelloWorld프로젝트이름에 오른쪽버튼을 눌러서 New -> Source File 해서 HelloWorld.c 파일을 생성합시다.

HelloWorld.c (Language : c)
#include <stdio.h>

int main(void)
{
    printf("Hello World!");
   
    return 0;
}
 

저렇게 적읍시다. 아 그리고 마지막 } 이거다음에 한칸 띄워주고 그다음칸을 한칸더 생성해줍시다. 그냥 }스페이스바하고 엔터 하고 저장합시다. 안그러면 no newline at end of file 라는 워링이 뜹니다-_-;
검색해보니 뭐 무슨 어쩌구 설명을 하는데 잘모르겠습니다-_-;

컴파일 단축키로 컴파일해봅시다. 저장하고 Ctrl + B를 누릅시다.
컴파일이 완료되면 run단축키인 Ctrl + F11을 누릅시다.

그러면 아래에 Console탭에 Hello World! 라고 뜰껍니다.
컴파일할 때 object파일인 *.o도 만들고 윈도우실행파일인 *.exe도 만들어줍니다.
 
Posted by 머드초보

댓글을 달아 주세요

  1. 새우초밥 2007.10.03 17:18  댓글주소  수정/삭제  댓글쓰기

    관련자료 감사합니다..^^

  2. docyacc 2007.10.10 18:31  댓글주소  수정/삭제  댓글쓰기

    저는 똑같이 했는데도
    마지막에 ctrl + f11하면
    lanch failed no bineries
    라고 뜨네요 ㅠㅠ

  3. docyacc 2007.10.10 18:39  댓글주소  수정/삭제  댓글쓰기

    아.. 빌드도 제대로 되지 않았네요..

    **** 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.

    뭐가 잘못된 걸까요 -_ㅠ

    • BlogIcon 머드초보 2007.10.10 20:54  댓글주소  수정/삭제

      음 제가 보기에는 gcc가 설치가 안된듯 싶습니다. MINGW에서 g++컴파일러를 체크하셨는지요? 아니면 Path가 안잡혀있던가 그런거 같은데요. gcc를 실행하지 못하는 듯의 에러로 보입니다^^

  4. BlogIcon 셜로콤즈 2008.04.22 19:11  댓글주소  수정/삭제  댓글쓰기

    덕분에 잘 설치했습니다. 감사합니다 ^^

    • 머드초보 2008.04.23 08:21  댓글주소  수정/삭제

      mingw말고 cygwin도 있는데 이게 더 좋은 것 같아요.
      둘의 차이점이 좀 있다고 하는데^^
      설치 방법은 동일해요 ^^
      방문해주셔서 감사해요 ^^

      헉....트랙백 따라가니 cygwin으로 하셨네요 ^^

  5. BlogIcon 도막 2008.08.07 16:04  댓글주소  수정/삭제  댓글쓰기

    안녕하세요!! 이클립스로 c언어 사용해 보려고 검색하다가 들렀습니다~
    유용한 정보가 됬습니다. 감사합니다~

    근데 디버깅 하는 법도 좀 알려주시면 안될까요 ^^;;

    부탁드립니다 ㅠㅠ

    • 머드초보 2008.08.07 22:44  댓글주소  수정/삭제

      우선 gdb를 설치하셔야하는데 그것도 같이 설치하셨나요?
      mingw로는 안해보고 cygwin으로는 해봤거든요.
      cygwin에서 gcc랑 gdb, make 등등 컴파일에 필요한 것 설치하시구요.
      http://mudchobo.tomeii.com/tt/284
      디버깅할 때 위처럼 문제점이 발생하면 위처럼 해결해주면 돼요 ^^

  6. KG 2009.11.30 03:08  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 프로그래밍을 이제막 배우기시작한 초보입니다.
    제가 환경이 MAC이라서 그런데 컴파일 프로그램은 어떤걸 써야하나요?
    그리고 디버깅은 어떻게 하는지 갑자기 배우려니 어렵네요..^^

    • 머드초보 2009.11.30 18:38  댓글주소  수정/삭제

      아...제가 맥은 잘 몰라서 ㅠㅠ
      맥이라면 커널은 Unix계열이니 gcc가 있지 않을까 의심해봅니다-_-

  7. HC 2010.01.22 12:08  댓글주소  수정/삭제  댓글쓰기

    안녕하세요~
    항상 비주얼로만 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
    이유가 먼가요 ㅠ?

    • 머드초보 2010.01.22 12:24  댓글주소  수정/삭제

      음...C작업엔 Visual Studio가 더 좋지 않나요?-_-
      근데 아래와 같은 에러는 저도 안해봐서 모르겠네요.
      에러 내용을 보내 윈도우프로그래밍을 하시려고 한 것 같은데, 저도 안해봐서 잘 ㅠㅠ
      라이브러리를 못찾는 것 같기도 하고....
      make파일을 조쿰 보시면....ㅠㅠ

  8. HC 2010.01.22 13:12  댓글주소  수정/삭제  댓글쓰기

    와우 빠른 답변 ㅎㅎ
    그런가요..
    그냥 Hello 출력할려했는데..
    똑같이 했는데 왜 이럴까나 ㅠ
    아 저는 학생인턴인데.. 이클립스로 작업하라 하더라고요 ` ㅅ`ㅋ
    막막하네요 ㅠ

    • 머드초보 2010.01.23 01:21  댓글주소  수정/삭제

      그냥 Hello World출력하는 것이라면 위처럼 하면 될텐데 ㅠㅠ
      MinGW말고, cygwin이라는 것도 있는데, 이걸로도 한번 해보세요^^

  9. 크렘 2010.01.29 00:02  댓글주소  수정/삭제  댓글쓰기

    **** 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++도 다 잘 되는데 말이죠..
    도와주세요 ㅜㅜ

  10. 크렘 2010.01.29 01:19  댓글주소  수정/삭제  댓글쓰기

    다시 하니깐 안되네요 -ㅁ- 지맘대로 컴파일 오류난담에 껏다 켜면 되고 다시 새로만들어서 그상태로 컴파일하면 또 안되고 ....
    충격 ... 저장 -> 빌드 -> 실행 순으로 해야하는 군요
    3개중 하나라도 빼먹으면 안되는 ..
    저장을 안하고 있었던 ....

    • 머드초보 2010.01.31 19:35  댓글주소  수정/삭제

      MinGW말고 Cygwin으로도 한번 해보시겠어요?
      MinGW와 동일한 컴파일러입니다.
      unix용 어플을 windows용으로 변환한 것으로 알고 있습니다^^

  11. 나그네 2011.01.12 00:32  댓글주소  수정/삭제  댓글쓰기

    C++은 안되네요..
    프로젝트 만드는거랑 컴파일해서 exe만든는것까진 되는데 결과가 안뜨고 컴파일하여 생긴 exe를 직접 실행하면 dll 파일 하나가 없다고 나오네요.

  12. sgkim34 2013.08.27 17:44  댓글주소  수정/삭제  댓글쓰기

    감사합니다. 컴파일러 설치 후 환경변수와 make 모두 적용해야 되는군요. 도움 많이 되었습니다.