delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/1998/06/25/07:42:50

From: colin AT fu DOT is DOT saga-u DOT ac DOT jp (Colin Peters)
Subject: RE: Cygwinb19.dll
25 Jun 1998 07:42:50 -0700 :
Message-ID: <004501bd9fd8$7e6bfac0$fa173185.cygnus.gnu-win32@gbird0.fu.is.saga-u.ac.jp>
Mime-Version: 1.0
To: <Robert DOT Cross AT scottish-newcastle DOT co DOT uk>
Cc: "GNU-Win32" <gnu-win32 AT cygnus DOT com>

Robert DOT Cross AT scottish-newcastle DOT co DOT uk
<Robert DOT Cross AT scottish-newcastle DOT co DOT uk> wrote:

[someone else wrote:]
># If you don't like
># that requirement, go rewrite the source code of the compiler itself and
set
># it up so that each EXE has all those functions included within them.
This
># has the disadvantage of increases every single executable's size by half
a
># meg.  It's your choice.


That's a bit harsh. You don't have to rewrite the compiler and linker, you
just have to recompile libcygwin32.a to be a static library instead of a DLL
import library for cygwin32.dll (or whatever the name is now).

>'Proper' (no insult intended to the genii behind gnu-win32) Unix systems
have
>the
>capability to produce "statically" or "dynamically" linked executables.
From
>what I understand
>of M$'s terminology, DLL's (*dynamic* link libraries), are required for
>dynamically linked
>EXEs. So surely the answer is to get gcc/ld to produce statically linked


Yeesssss... Dynamic link libraries, DLLs, are required by programs that
contain references to them, which I suppose you could call dynamically
linked executables. However, practically all Win32 programs require at least
one of the Win32 API DLLs, directly or through some other library or DLL, so
basically all Win32 programs are dynamically linked. To achieve something
like a UNIX statically linked executable what you need to do is make sure
you don't link any DLLs which don't come with the operating system.

gcc and ld are perfectly capable of statically linking libraries on Win32.
The problem is getting the library. Cygnus builds their library as a DLL
because that way every program shares the single library file, making for
smaller exes and making upgrades to the library simple (just drop in a new
dll). If you want to link statically you need to build a static version of
the library from source. This would be simple for an ordinary library, but,
if I'm not mistaken, newlib does some stuff with shared memory between all
instances of the DLL (i.e. all programs that use the DLL), which would be
difficult to do with a static lib. Please correct me if I'm wrong.

Given that you could build newlib as a static library then you could simply
replace the current libcygwin32.a with the static library and everything
would work (ha ha).

BTW, your program wouldn't necessarily be 0.5 meg larger either, because
static linking only includes the objects in the library which are referenced
by your program. However, because libraries tend to have cross references
this may turn out to be a lot of stuff you don't actually *use*, but may not
be the whole library.

So, either you can rebuild newlib as a static library, or you can distribute
a copy of cygwin's dll with your program (or you can use Mingw32, but that
would be a shameless plug :-) ).

Colin.

-- Colin Peters - colin at fu.is.saga-u.ac.jp
-- Saga Univ. Dept. of Information Science
-- http://www.geocities.com/Tokyo/Towers/6162/index.html
-- http://www.fu.is.saga-u.ac.jp/~colin/index.html



-
For help on using this list (especially unsubscribing), send a message to
"gnu-win32-request AT cygnus DOT com" with one line of text: "help".

- Raw text -


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