mingw와 cygwin의 호환성

chaos4chaos의 이미지

쉘이 딸려서 mingw를 쓰다가 cygwin으로 바꾸었습니다.

그런데.. 이 둘 사이의 호환성 문제가 궁금합니다.
알기로는 cygwin gcc에 컴파일, 링크 옵션으로 -mno-cygwin을 붙이면, 내부적으로 mingw gcc를 호출한다고 알고 있었는데요.... 아무래도 아닌것 같습니다.
소스 여기저기서 난리더군요.....쩝.

mingw에서 지원하는 conio.h를 포함시킬려고 별짓 다해보았는데... 전혀 무반응입니다.. cygwin에서 mingw 관련 파일들도 전부 설치하고 include path도 mingw를 앞으로도 해보고 뒤로도 해보고.... 결국은 사용자 정의 함수로 덮어 놓기는 했습니다만 깨림칙합니다... :cry:
system("cls") 같은 문장도 전부 system("cmd.exe /c cls") 와 같이 바꾸어주어야 하더군요...

둘 사이에 호환성 문제가 없다고 익히 들어왔습니다만, 컴파일러 바꾸고 하루동안 삽질을 끝내고 나니... 허탈하더군요. :D
크로스 컴파일에 방해가 되는 도스만의 기능들은 원래 사용할 수 없는 건가요... 아님 진짜 mingw나 cygwin이나 완벽하게 호환 가능한가요?
아래 송지석 님의 설치기 읽다가 생각나서 올려봅니다.

dummy999의 이미지

저역시 안됩니다.

방법이 알고싶어서 다시 들춰냅니다

저는 이클립스에서 작업중인데
이클립스에서는 어떻게 안될가요?

매니지드 매이크 방식을 이용하고있는데 make를 고치고싶습니다.

------------------------------------
F/OSS bless you... ^^*

monpetit의 이미지

흠... 뭔가 오해를 하고 계신듯 하네요.
cygwin과 mingw32는 호환이 되는 게 아닙니다.
cygwin에서 mingw32를 호출하는 것은 마치 Linux에서 win32용 크로스 컴파일을 할 때랑 같은 겁니다.
즉 헤더와 라이브러리 파일을 따로 사용한다는 겁니다.
물론 cygwin은 mingw32와 완전 분리는 아닙니다. 왜냐하면 cygwin에서도 win32api를 사용할 때가 있는 데 이 때엔 mingw32에서 빌려오거든요.
정리하자면 win32api는 공유, 그 외에는 분리... 이렇게 되는 겁니다.
대신 cygwin은 mingw32 개발을 위한 여러 unix 유틸리티를 제공해 주었는데, 사실 이게 좀 불편할 때가 있습니다. 디렉토리를 unix 방식으로 모두 변경시키기 때문에 호환성 문제가 따르는 거죠. 이미 cygwin 환경이 있는데도 불구하고 굳이 msys를 왜 또 만드는지 알 수 있습니다.

dummy999의 이미지

<< 문제 >>
cygwin + eclipse 상에서 conio.h및 기타 함수를 사용할수없음.
-----------------------------------------------
<< 단서1 >>-
mno-cygwin 을 써야지만이 conio.h를 쓸수있을것같음
그래서 make옵션을 바꿔줄라고 했는데 안되더군요

이유 ::
make에서는 gcc에서 사용하는 옵션을 써서는안되기때문임.
-----------------------------------------------
<< 단서2 >>
GCC에 바로 스위치를 써줘야한것같다는 추측.

방법 ::
네비게이터.해당프로젝트.오른쪽클릭->특성-> C/C++ Build -> 구성설정 ->

Tool Settings.GCC C Compiler -> Miscellaneius->other flags

여기에다 삽입
-mno-cygwin

결과 ::
역시 이클립스에서는 안되었음
-----------------------------------------------
<< 단서3 >>
검증차원에서 -mno-cygwin 이 실제로 작동하는지 확인하기위해
콘솔창에서 해당명령을 붙여넣기함.

방법 ::

gcc -O0 -g3 -Wall -c -fmessage-length=0 -mno-cygwin -o4_2.o ../4_2.c 

결과 ::
콘솔상에서는 정상작동.
이클립스에서는 설정을 잘못했기때문에 안되는것다고 잠정 결론지음.

현재 나오는 콘솔화면 ::

**** 프로젝트 C_42_BubbleSort에 대한 구성 Debug의 전체 다시 빌드 ****

make -k clean all 
rm -rf 4_2.o   4_2.d   C_42_BubbleSort.exe
파일 빌드 중: ../4_2.c
gcc -O0 -g3 -Wall -c -fmessage-length=0 -mno-cygwin -o4_2.o ../4_2.c
빌드 완료: ../4_2.c
 
대상 빌드 중: C_42_BubbleSort.exe
gcc  -o C_42_BubbleSort.exe 4_2.o    
4_2.o: In function `main':
cygdrive/c/eclipse/workspace/C_42_BubbleSort/Debug/../4_2.c:51: 
undefined reference to `_getch'
collect2: ld returned 1 exit status
make: *** [C_42_BubbleSort.exe] Error 1
make: Target `all' not remade because of errors.
프로젝트 C_42_BubbleSort에 대한 빌드 완료

의문 ::
/cygdrive/c/eclipse/workspace/C_42_BubbleSort/Debug/../4_2.c:51:
여기에서 왜 드라이브문자가 이런식으로 나오는지 궁금함.

------------------------------------
F/OSS bless you... ^^*

nahu5의 이미지

target 을 mingw 으로 잡아줘보세요

dummy999의 이미지

nahu5 wrote:
target 을 mingw 으로 잡아줘보세요

저는 메니지드 메이크방식(수동방식이던가?) 그걸로했습니다.
실질적으로 수동으로 메이크를 고칠수있겠지만.. 툴사용법을 익히고자 툴에서 어딜고치면되는지 알고싶습니다.

이런거는.. 툴이 알아서 해버리므로.. 가끔 제가 고쳐놨다해도 툴이 다시 덮어쓰는 경우가있는경우도있더라구요.
그래서 툴을 설정하는게 훨씬 효과적이라고 생각들었습니다.

대상 빌드 중: C_42_BubbleSort.exe 
gcc  -o C_42_BubbleSort.exe 4_2.o    
4_2.o: In function `main': 
cygdrive/c/eclipse/workspace/C_42_BubbleSort/Debug/../4_2.c:51: 
undefined reference to `_getch' 
collect2: ld returned 1 exit status 
make: *** [C_42_BubbleSort.exe] Error 1 
make: Target `all' not remade because of errors. 
프로젝트 C_42_BubbleSort에 대한 빌드 완료 

gcc -o C_42_BubbleSort.exe 4_2.o

오류는 이부분(링크부분)인것같습니다.

위메시지를 보면 getch()때문에 에러가 나고있습니다. 즉 getch()의 구현부(라이브러리)를 못찾는것같은데

그래서 제가 한것은 conio.h에 선언된 getch()의 구현부
라이브러리파일을 찾고있습니다.

mingw의경우엔 conio.o라는 파일이 별도로 존재한것같습니다.
반면 cygwin에는 conio.h는 있지만 conio.o는 없네요

또한 코드내에는 system()를 사용하고있습니다.
이것도 인식하지않는건가요?
간단하게 예제를 이용해서
이것이 작동하는 방법좀 알려주시면 감사하겠습니다.

여러모로 지쳐가고있는것같습니다.
뭔가 되지않고.. cygwin의 한계가 보이고있는건지 걱정도됩니다.

cygwin에서 컬러설정하는것도 제가아는 방법(예전에 되었던방법)이 되지않고있습니다.
대략 OTL직전임..

------------------------------------
F/OSS bless you... ^^*

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.