Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Date: Tue, 13 Jul 2004 19:00:54 +0200 From: "Gerrit P. Haase" Reply-To: "Gerrit P. Haase" Organization: Esse keine toten Tiere Message-ID: <9027008325.20040713190054@familiehaase.de> To: "Alexey Lyubimov" CC: cygwin AT cygwin DOT com Subject: Re: gcc: How does gcc look for foo.dll in `gcc ... -lfoo'? In-Reply-To: <000701c468f8$234c5640$4c62bcd4@ael> References: <000701c468f8$234c5640$4c62bcd4 AT ael> MIME-Version: 1.0 Content-type: text/plain; charset=us-ascii Content-transfer-encoding: 7bit Alexey wrote: > I'm confused since the gcc documentation says that the only thing that > `-lfoo' does, is that it allows gcc to look for `libfoo.a' while linking. > But what about the shared libraries (DLLs)? It seems to me that gcc looks > for `libfoo.dll', `cygfoo.dll', `foo.dll' and may be for all these plus `.a' > suffix, doesn't it? But, for example, libfoo and cygfoo could be two > _different_ libraries at all. Can anybody explain the "-l" feature for DLLs? > I've tried the Cygwin's User Guide and gcc info, but did not find any > answer. Given you have a library 'mfoo', then you should have a file libmfoo.a in /usr/lib which is the static archive in the default search path. you specify this archive at the gcc link command with -lmfoo, if this library is a shared library, you should have also an import library /usr/lib/libmfoo.dll.a and a DLL /usr/bin/cygmfoo-2.dll, the default search order is /usr/lib, /usr/bin and then libmfoo.dll.a, libmfoo.a, cygmfoo.dll. So if you have just a static archive, it is found, if you have an import library and a static archive at first the import library is used (if not -static is used at the link command). If the import library is used, ld knows how to find the correct DLL and links the application against the DLL using the import library. If there is no static archive and no import library, then also /usr/bin is searched and also the cygmfoo.dll would be found, but if its actual name is cygmfoo/2.dll you would need to specify -lmfoo-2 at the link line to succeed the direct linking with the DLL. Additionally you may specify the full name with path to link against: gcc -o myapp.exe main_object.o /usr/lib/libmfoo.dll.a or gcc -o myapp.exe main_object.o /usr/lib/libmfoo.a or gcc -o myapp.exe main_object.o /usr/bin/cygmfoo-2.dll Gerrit -- =^..^= http://nyckelpiga.de/donate.html -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/