라이브러리들의 내용을 볼수있는 방법은 없을까요? 또는 문서라

dummy999의 이미지

제가 알기로는 ld라는걸로 라이브러리를 볼수있다고 들었습니다.
물론 예전에 AIx로 보여준걸 보긴했는데.
자세한건 몰겠구요..

찾아보려해도 안보이더군요..

왜냐면.. Cygwin에서 conio.h가 사용하는 라이브러리를 찾고싶기때문입니다.
mingw는 conio.o라는 라이브러리가 별도로 존재하긴하는데
cygwin에서는 그게 없는것같았습니다.
그래서 링크할때. 이것이잇는것을 강제적으로 링크시키려합니다.
(물론 콘솔상에서 하면 됩니다. 그러나 이클립스상에서는 안됩니다.)

그렇기때문에 그것을 해결하면 될거것같아서 다시 문의를합니다.

saxboy의 이미지

nm -s 해보세요.
.a 를 뜯을 때는 ar, 바이너리를 뜯을 때는 ldd 를 사용해주는 센스도~

prolinko의 이미지

conio.h는 윈도우 시스템에만 존재하는 헤더입니다.

getch 같은 함수를 사용하려는 것이라면 Linux나 다른 POSIX시스템(cygwin도 포함해서)에서는 ncurses같은 curses라이브러리를 사용하여야 합니다. cygwin 상에서는 setup.exe를 실행하신다음 libncurses-devel 패키지를 설치하시면 됩니다. 자세한 사용법은 man getch 같이 맨페이지를 보시거나 ncurses 메뉴얼을 참조하십시오.

하지만 굳이 cygwin을 POSIX 레이어로 보지 않고 cygwin에 포함된 gcc를 이용해서 개발을 하는 것 뿐이라면, 윈도우 시스템에 포함된 API들을 사용하지 못할 것도 없습니다. 이를 위해서라면 Windows platform SDK를 다운받아서 설치하거나, 돈을 주고 Visual C++을 구입하셔야 됩니다. 그리고 conio.h가 설치된 디렉토리를 컴파일시 명시해 주고, 링킹시 해당 함수가 들어있는 라이브러리를 링킹하시면 됩니다.

찾아보니 Windows SDK의 경우 C:\Program Files\Microsoft SDK\src\crt\conio.h 에 들어있습니다.

monpetit의 이미지

prolinko wrote:
하지만 굳이 cygwin을 POSIX 레이어로 보지 않고 cygwin에 포함된 gcc를 이용해서 개발을 하는 것 뿐이라면, 윈도우 시스템에 포함된 API들을 사용하지 못할 것도 없습니다. 이를 위해서라면 Windows platform SDK를 다운받아서 설치하거나, 돈을 주고 Visual C++을 구입하셔야 됩니다. 그리고 conio.h가 설치된 디렉토리를 컴파일시 명시해 주고, 링킹시 해당 함수가 들어있는 라이브러리를 링킹하시면 됩니다.

찾아보니 Windows SDK의 경우 C:\Program Files\Microsoft SDK\src\crt\conio.h 에 들어있습니다.


mingw32가 이 API를 지원해 주고 있습니다.
dummy999의 이미지

monpetit wrote:
prolinko wrote:
하지만 굳이 cygwin을 POSIX 레이어로 보지 않고 cygwin에 포함된 gcc를 이용해서 개발을 하는 것 뿐이라면, 윈도우 시스템에 포함된 API들을 사용하지 못할 것도 없습니다. 이를 위해서라면 Windows platform SDK를 다운받아서 설치하거나, 돈을 주고 Visual C++을 구입하셔야 됩니다. 그리고 conio.h가 설치된 디렉토리를 컴파일시 명시해 주고, 링킹시 해당 함수가 들어있는 라이브러리를 링킹하시면 됩니다.

찾아보니 Windows SDK의 경우 C:\Program Files\Microsoft SDK\src\crt\conio.h 에 들어있습니다.


mingw32가 이 API를 지원해 주고 있습니다.

cygwin에도 mingw가 지원됩니다
즉 conio.h가 지원한다는거죠.
호환성을 위해서 conio.h를 만들어놨습니다.
다만 그냥하면 절때로 읽어지지않습니다.
왜냐면 이녀석이 상주해있는 위치가 /usr/include/mingw/에있으니까요
그래서 컴파일하면 반드시 컴파일과정에서 -nmo-cygwin옵션을 찍어줘야합니다.

다만 링크과정에서는 해당라이브러리를 참조못하니까 자꾸 그걸사용하는
getch()가 연결에러라고 뜹니다.
제가 특별하게 "컴파일과정에서 -nmo-cygwin옵션"이것처럼 링크과정에서
그런 인식옵션이있다면. 해보겠지만.. 특별하게 아는게 없는이상
강제적으로 직접기술해야겠죠..

그냥 gcc -mno-cygwin 파일명.c 해버리면 금방됩니다.
전부다 인식도하구요.
하지만.. makefile을 만들거나 또는 그것을 이용하는 이클립스의경우 전부다 일일히 적어줘야합니다.
그러므로 그것을 알아야만이.. 당분간 그호환성을 유지할수있지않을까요?

근데 nm -s /lib/* | grep "conio" 나 nm -s /lib/* | grep "_getch" 하니까... 엄청 많네요 -_-;;

전부 쓸때없는거같은데..
정규식도 잊어버렸고.. (저렇게하면 _getchar도 검색됩니다)

대게 conio.o를 생각하기마련인데.. 그런것도 없네요..
conio.h만보고 라이브러리를 확인하는방법은 없겠죠?

갈수록 좌절 분위기입니다.

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

monpetit의 이미지

dummy999 wrote:
monpetit wrote:
prolinko wrote:
하지만 굳이 cygwin을 POSIX 레이어로 보지 않고 cygwin에 포함된 gcc를 이용해서 개발을 하는 것 뿐이라면, 윈도우 시스템에 포함된 API들을 사용하지 못할 것도 없습니다. 이를 위해서라면 Windows platform SDK를 다운받아서 설치하거나, 돈을 주고 Visual C++을 구입하셔야 됩니다. 그리고 conio.h가 설치된 디렉토리를 컴파일시 명시해 주고, 링킹시 해당 함수가 들어있는 라이브러리를 링킹하시면 됩니다.

찾아보니 Windows SDK의 경우 C:\Program Files\Microsoft SDK\src\crt\conio.h 에 들어있습니다.


mingw32가 이 API를 지원해 주고 있습니다.

cygwin에도 mingw가 지원됩니다
즉 conio.h가 지원한다는거죠.
호환성을 위해서 conio.h를 만들어놨습니다.
다만 그냥하면 절때로 읽어지지않습니다.
왜냐면 이녀석이 상주해있는 위치가 /usr/include/mingw/에있으니까요
그래서 컴파일하면 반드시 컴파일과정에서 -nmo-cygwin옵션을 찍어줘야합니다.

다만 링크과정에서는 해당라이브러리를 참조못하니까 자꾸 그걸사용하는
getch()가 연결에러라고 뜹니다.
제가 특별하게 "컴파일과정에서 -nmo-cygwin옵션"이것처럼 링크과정에서
그런 인식옵션이있다면. 해보겠지만.. 특별하게 아는게 없는이상
강제적으로 직접기술해야겠죠..

그냥 gcc -mno-cygwin 파일명.c 해버리면 금방됩니다.
전부다 인식도하구요.
하지만.. makefile을 만들거나 또는 그것을 이용하는 이클립스의경우 전부다 일일히 적어줘야합니다.
그러므로 그것을 알아야만이.. 당분간 그호환성을 유지할수있지않을까요?

근데 nm -s /lib/* | grep "conio" 나 nm -s /lib/* | grep "_getch" 하니까... 엄청 많네요 -_-;;

전부 쓸때없는거같은데..
정규식도 잊어버렸고.. (저렇게하면 _getchar도 검색됩니다)

대게 conio.o를 생각하기마련인데.. 그런것도 없네요..
conio.h만보고 라이브러리를 확인하는방법은 없겠죠?

갈수록 좌절 분위기입니다.

1.
자꾸 호환성 얘기를 하시는데 이건 호환성의 문제가 아니라 target을 선택하는 문제입니다.
-mno-cygwin을 선언하는 순간 cygwin이 아니라 실은 mingw입니다. 즉 cygwin이 지원하는
posix 함수들은 사용 못한다고 보면 됩니다.

2.
명령행에서 gcc -mno-cygwin 파일명.c 을 하면 잘 된다면서요. 이게 무슨 얘기냐 하면
-mno-cygwin 옵션을 주면 컴파일과 링크 시에 알아서 기본 win32api가 들어가 있는
라이브러리를 링크시켜 준다는 얘기입니다. 그런데 지금 eclipse에서 에러가 나는 이유는
컴파일과 링크 과정을 분리시켜 놓았기 때문에, 컴파일할 때엔 -mno-cygwin 옵션이
먹혔지만 링크할 때엔 안 먹혔기 때문에 발생하는 에러입니다.
결론은 링크 옵션에도 -mno-cygwin을 추가하세요.

3.
뭐니뭐니 해도 이 문제는 결국 eclipse 사용법의 무지에서 비롯된 게 아니겠습니까.
1) eclipse에서 C/C++ 프로젝트를 만든 후 프로젝트명에 마우스를 갖다대고 오른쪽
버튼을 클릭해서 properties를 오픈
2) C/C++ Build -> Configurations Settings -> Tool Settings 에서
GCC C Compiler와 GCC C Linker 둘 모두 Miscellaneous에 있는 flags에
-mno-cygwin을 추가

이렇게 하면 makefile에도 -mno-cygwin 옵션이 먹힙니다.
참고로 conio의 getch가 들어가 있는 라이브러리는 libmsvcrt.a입니다. ld가 알아서 링크시켜 주겠지만 굳이 그것만 콕 집어 링크시키겠다고 생각하신다면... :)

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.