본문 바로가기

구글과인터넷/안드로이드

cygwin gcc에서 winapi(windows api) 사용하기... 관련

cygwin에서 gcc로 windows api를 사용하려고 할 떄, 컴파일이 안돼면 다음과 같은 옵션을 사용.

gdi32.dll에 있는 경우에는 아래와 같이 -lgdi32을 링크 합니다.

gcc -o name.exe source.cpp -lgdi32

아래는 링크 할 수 있는 라이브러리의 리스트 입니다. 

advapi32 largeint ole32 scrnsave vfw32 cap lz32 oleaut32 shell32 win32spl comctl32 mapi32 oledlg snmp winmm comdlg32 mfcuia32 olepro32 svrapi winserve ctl3d32 mgmtapi opengl32 tapi32 winspool dlcapi mpr penwin32 th32 winstrm gdi32 msacm32 pkpd32 thunk32 wow32 glaux nddeapi rasapi32 url wsock32 glu32 netapi32 rpcdce4 user32 wst icmp odbc32 rpcndr uuid imm32 odbccp32 rpcns4 vdmdbg kernel32 oldnames rpcrt4 version 

자료의 출처는 cygwin 홈페이지의 F&Q 입니다.

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



Cygwin Project
Cygwin은 레드햇에 의해 개발된 윈도우용 Unix 환경이다. Cygwin은 Windows NT와 9x에서 동작하는 대중적인 GNU 개발 도구와 유틸리티들의 모음이며 다음과 같은 두 부분으로 구성되어 있다.

● 중요한 Unix API 기능을 제공하여 Unix 에뮬레이션 층 역할을 하는DLL(Cygwin1.dll)

● Unix에서 포팅되어 Unix/Linux 룩앤필을 제공하는 도구 모음

Cygwin DLL은 윈도우 CE를 제외한 윈도우 95 이후의 베타버전이나 RC 버전이 아닌 모든 x86 버전의 윈도우에서 동작한다. 이들 프로그램이 필요로 하는 Unix 시스템 콜과 환경은 Cygwin 라이브러리를 통해 제공되며 Cygwin과 그 도구 모음들은 이것을 사용하여 동작한다.

Cygwin은 GNU 소프트웨어(gcc, gas, ld 등등…)의 일부분이며, 어떤 부분은 표준 X11 라이센스를 따르며, 다른 부분은 공개 영역에 속하며, 레드햇에 의해 작성된 또다른 부분은 GPL을 따르므로 소프트웨어의 사용에 대한 비용을 지불하지 않아도 된다. 어떠한 것도 쉐어웨어가 아니다.

Cygwin이 설치되면, 프로그래머는 표준 마이크로소프트 Win32 API와 Cygwin API를 사용하여 Win32 콘솔 또는 GUI 어플리케이션을 작성할 수 있다. 결과적으로 많은 중요한 Unix 프로그램을 소스코드를 크게 수정하지 않더라도 쉽게 윈도우로 포팅할 수 있다. 이것은 Cygwin 배포판에 포함된 개발 도구를 포함하여 대부분의 유용한 GNU 소프트웨어의 환경 설정과 빌드 설정을 포함한다.

Cygwin 프로젝트는 먼저 gcc, gdb, gas등과 같은 개발 도구를 향상시켜 Win32 네이티브 객체 파일을 생성하고 인터프리트 할 수 있게 했다.그 다음으로 할 일은 다른 필요한 기타 도구들을 WinNT/9x로 포팅하는 것이었다. 이 작업은 Win32 API로 거대한 양의 소스코드를 재 작성하는 일이었으므로 많은 시간이 필요했다. 대신에 Win32 API에는 없는 유닉스 계열의 기능(fork, spawn, signals, select, sockets등)을 가진 공유 라이브러리 Cygwin DLL을 작성하는 방법을 사용했다. 이 새로운 인터페이스를 Cygwin API라 한다.

이 인터페이스가 작성이 되어, 이를 링크하는 Unix 기반의 크로스 컴파일러를 사용하여 Win32 도구를 빌드할 수 있다.


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


출처: http://www.perlmonks.org/?node_id=583556

Win32API under Cygwin not installing

by Xenofur
on Nov 12, 2006 at 13:20 UTC ( #583556=perlquestion: print w/ repliesxml )Need Help??

Xenofur has asked for the wisdom of the Perl Monks concerning the following question:

Morning,

I have recently installed Cygwin on my WinXP SP2 box, so i can do easy development on it. After getting perl onto it i began updating the modules that came with it to the latest CPAN versions. While doing these updates i often saw this message:
WARNING: Cannot schedule '/usr/lib/perl5/5.8/cygwin/auto/Cwd/Cwd.dll.A +AA' for deletion at reboot. Try installing Win32API::File to allow operations on locked files
Naturally i tried to follow these instructions, but came to an abrupt halt with this:
Running make test /usr/bin/perl.exe "-MExtUtils::Command::MM" "-e" "test_harness(0, 'bli +b/lib', 'blib/arch')" t/*.t t/file....FAILED tests 2, 5-6, 13, 23-29, 31, 35 Failed 13/267 tests, 95.13% okay (less 1 skipped test: 253 oka +y, 94.76%) t/tie.....ok Failed Test Stat Wstat Total Fail List of Failed ---------------------------------------------------------------------- +--------- t/file.t 267 13 2 5-6 13 23-29 31 35 1 subtest skipped. Failed 1/2 test scripts. 13/277 subtests failed. Files=2, Tests=277, 1 wallclock secs ( 0.59 cusr + 0.15 csys = 0.74 + CPU) Failed 1/2 test programs. 13/277 subtests failed. make: *** [test_dynamic] Error 255 /usr/bin/make test -- NOT OK Running make install make test had returned bad status, won't install without force Failed during this command: YVES/Win32API-File-0.1001.tar.gz : make_test NO
I've tried googling for it, but all i could find were two cpan testers reports.

Do any of you know wether there is a way to fix this? (If it makes a difference, i'm running cpan via the Cygwin bash shell.)

Comment on Win32API under Cygwin not installing 
Select or Download Code
Re: Win32API under Cygwin not installing
by JSchmitz on Nov 12, 2006 at 14:03 UTC
    Well first look at this and I would say did you try and installed using the -force option? That will install the module and ignore the failed tests. In many cases this will work. 

    I have seen this error a lot and forced the install and the module has worked fine. 

    I am confused? You put Cygwin on your box just to do Perl developement. If that is true is there a reason that you just didn't install Activestate Perl for Win32. Its very slick and the module updates flow like butter at a chik-fil-a store.

    ActiveState Perl 

    Is there is some other reason you are using Cygwin? 

    Cheers - 

    Jeffery
    I usually don't use force options, unless i am fully aware of the implications. Will try this though and see what happens. My thanks. :)

    Also, yes, i did try ActiveState Perl, but got turned away from it for two reasons:
    1. I can't use CPAN::Mini with it, as it relies on the pre-compiled PPM packages. This is a distinct disadvantage, as i am often without internet.
    2. The development i do will be used on linux-based web-servers, as such i would rather execute the scripts in a similar environment, instead of having something bite me in the backside later on.
    The development i do will be used on linux-based web-servers, as such i would rather execute the scripts in a similar environment, instead of having something bite me in the backside later on.

    If you have the disk space to spare I would have thought you'd be better off installing Linux and dual-booting your PC or perhaps try a live distro like Knoppix to develop under.

    Just a thought.

    JohnGG

    I can't use CPAN::Mini with it, as it relies on the pre-compiled PPM packages

    With either a Microsoft compiler, or the freely available MinGW compiler (and the freely available dmake) you can build modules the same way on ActiveState perl as you do on Linux. Although PPM is the probably the more common route taken, it's not true that ActiveState perl is reliant upon PPM. 

    Not saying you shouldn't use Cygwin's perl (though, generally, I wouldn't recommend it) ... just having a bit of a nitpick over that first reason you gave :-) 

    Cheers,
    Rob
Re: Win32API under Cygwin not installing
by ysth on Nov 12, 2006 at 21:16 UTC
    Install the perl-libwin32 cygwin package, using cygwin's setup program.
    Install the perl-libwin32 cygwin package, using cygwin's setup program

    Does that package include Win32::API ? 
    Win32::API is not normally part of the libwin package ... though, faik, it could be part of the perl-libwin32 cygwin package.

    There are Win32::API packages for Cygwin (both source and compiled) at http://xarch.tu-graz.ac.at/publ/cygwin/contrib/perl-Win32-API/

    Cheers,
    Rob