delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2004/07/13/13:01:21

Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
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" <freeweb AT nyckelpiga DOT de>
Reply-To: "Gerrit P. Haase" <freeweb AT nyckelpiga DOT de>
Organization: Esse keine toten Tiere
Message-ID: <9027008325.20040713190054@familiehaase.de>
To: "Alexey Lyubimov" <alexeipobox AT mtu-net DOT ru>
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

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/

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019