Article View: comp.os.os2.programmer
Article #3633Re: GCC and DLL's
From: Wen-Chun Ni
Date: Mon, 25 Jan 1993 19:46
Date: Mon, 25 Jan 1993 19:46
93 lines
3697 bytes
3697 bytes
In article <1993Jan25.153958.4298@VFL.Paramax.COM> rickt@rmtc.paramax.com (Rick Thompson [RMTC/ISP]) writes:
>
>Hello,
>
>I've just obtained GCC from hobbes and was wondering if I can create dll's with
>it? Regular exe's went fine. If it is possible can someone send me an example
>make file or whatever you think appropriate?
>
>
I asked the question a couple of days before, but nobody replied. I went
ahead and tried it myself. Up to now, almost all testable DLL samples in
the redbook and November PDK are compiled and ran without problems.
Several points should be noted:
* Look at the manual entry of emxomfld in /emx/doc/emxdev.doc.
Also check the section about how to create a DLL.
* Compile the program with
gcc -Zdll -c foo.c
It is better to add -Zmt to use the run-time DLL.
Also you may want
gcc -Zdll -Zomf -c foo.c
to produce foo.obj, rather than foo.o.
* If you directly use link386, do remember to include
/emx/lib/dll0.obj in the object file section.
libc.lib, libgcc.lib, libemx1.lib, libemx2.lib, and libos2.lib
are possibly the minimal set of libraries you want to
load if you use link386.
A good example is
link386 \emx\lib\dll0.obj foo.obj, foo.dll, \
$(ALL_THE_LIBS), foo;
I don't remember those cryptic link386 flags, check it
yourself.
* You don't need PDK to get a running DLL but it's recommended.
The following is my version of Makefile for pwfolder in the redbooks.
Enjoy it!
#****************************************************************************
# Dot directive definition area (usually just suffixes)
#****************************************************************************
.SUFFIXES: .c .o .obj .dll .csc .sc .h .ih .ph .psc .rc .res
#****************************************************************************
# Environment Setup for the component(s).
#****************************************************************************
#
# Compiler/tools Macros
#
CFLAGS = -O -c -Zdll -Zmt
CC = gcc
LINK = link386
LDFLAGS = /noi /map /nol /nod /exepack /packcode /packdata /align:16
LIBS = libc+libgcc+libemx1+libemx2+libos2
#****************************************************************************
# Set up Macros that will contain all the different dependencies for the
# executables and dlls etc. that are generated.
#****************************************************************************
OBJS= pwfolder.obj \emx\lib\dll0.obj
#****************************************************************************
# Setup the inference rules for compiling source code to
# object code.
#****************************************************************************
.c.obj:
$(CC) $(CFLAGS) -c $<
emxomf $*.o
.csc.ih:
sc $<
all: pwfolder.dll
pwfolder.obj: $*.c $*.ih $*.h $*.sc
pwfolder.dll: $(OBJS) pwfolder.res
$(LINK) $(LDFLAGS) $(OBJS),$@,,$(LIBS),$*;
rc $*.res $*.dll
pwfolder.res: pwfolder.rc
rc -r $*.rc $*.res
Wen-Chun Ni, wcn@cs.brown.edu
-------------------------------------------------------------------
"Great spirits have always encountered violent opposition
from mediocre minds..." -- Albert Einstein
Technical Details
Message-ID:
<1993Jan25.194620.14179@cs.brown.edu>Path:
arc1-ca.pugleaf.net!sparky!uunet!brunix!brunix!wcnReferences:
<1993Jan25.153958.4298@VFL.Paramax.COM>Show Full Headers
Complete Article Headers
Newsgroups: comp.os.os2.programmer Path: arc1-ca.pugleaf.net!sparky!uunet!brunix!brunix!wcn From: wcn@cs.brown.edu (Wen-Chun Ni) Subject: Re: GCC and DLL's Message-ID: <1993Jan25.194620.14179@cs.brown.edu> Sender: news@cs.brown.edu Organization: Brown University Department of Computer Science References: <1993Jan25.153958.4298@VFL.Paramax.COM> Date: Mon, 25 Jan 1993 19:46:20 GMT Lines: 93