Mailing-List: contact cygwin-help AT sourceware DOT cygnus DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT sources DOT redhat DOT com Delivered-To: mailing list cygwin AT sources DOT redhat DOT com X-Sent: 21 Feb 2001 00:50:58 GMT From: "Kevin Wright" To: "Markus Hoenicka" , Subject: RE: building DLLs (was:RE: New user help - dont understand Mount (and the rest)) Date: Tue, 20 Feb 2001 16:49:17 -0700 Message-ID: <000a01c09b97$bcd7a530$b01661c7@holstein-mobile.ASPECTDV.COM> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 (Normal) X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook 8.5, Build 4.71.2173.0 In-Reply-To: <14995.193.753000.902610@gargle.gargle.HOWL> Importance: Normal X-MimeOLE: Produced By Microsoft MimeOLE V4.72.3612.1700 Markus, I believe I derived that example from Charles Wilson, so he would have more expertise in this area. However, I can say from my own experience that I always have to use a two step process: Here's an example from my notes when I built libiconv: a) create the .def file using dlltool (this creates a libfoo.dll.a which can be linked against.) $ dlltool --export-all --output-def libiconv_.def --dllname libiconv.dll *.o NOTE: be careful which .o files are used for this. You don't always want to export all of the symbols otherwise you'll have problems creating the dll. A good rule of thumb is to use the same objects that would normally be used to create the static library. b) create the dll using gcc -shared $ gcc -shared -Wl,--enable-auto-image-base -o libiconv.dll \ -Wl,--out-implib=libiconv.dll.a libiconv_.def *.o c) copy the dll file to /usr/local/bin d) copy the dll.a file to /usr/local/lib Here's some notes I have from either email or a README somewhere from Charles Wilson: With newer versions of GCC (and Cygwin) you can create DLLs much more easily without the need for dllhelpers. You would use something like gcc -Wl,--out-implib,libtest.import.a -shared -o test.dll test.o This would create "test.dll" with from the object file "test.o" . It will also create an import library for the DLL (libtest.import.a). (Of course, you still need to add the prefixes "__declspec(dllexport)" and "__declspec(dllimport)" to your headers as needed.) The last piece of info from Charles regarding adding the dllimport and dllexport is the most difficult part. I'm still not sure of the best way to do that. Hope this helps, --Kevin > -----Original Message----- > From: cygwin-owner AT sources DOT redhat DOT com > [mailto:cygwin-owner AT sources DOT redhat DOT com]On Behalf Of Markus Hoenicka > Sent: Tuesday, February 20, 2001 4:42 PM > To: cygwin AT cygwin DOT com > Subject: building DLLs (was:RE: New user help - dont understand Mount > (and the rest)) > > > Kevin Wright writes: > > Here's a way to create dll's in a makefile: > > > > OBJS=foo > > BASE=foo > > > > gcc -shared -o lib$(BASE).dll -Wl,--out-implib=lib$(BASE).dll.a \ > > -Wl,--export-all -Wl,--enable-auto-image-base \ > > -Wl,--output-def=lib$(BASE)_.def $(OBJS) > > > > Is this some one-size-fits-all solution for all DLL pains on Cygwin? > I'd be glad if it was, but apparently I'm out of luck. I'm trying to > compile OpenSP (a SGML parser) using a DLL. Building the DLL works on > other platforms. I tried your suggestion above, but I get: > > mhoenicka AT GIRCH19 ~/prog/OpenSP-1.5pre5/lib/.libs > $ gcc -shared -o libosp.dll -Wl,--out-implib=libosp.dll.a > -Wl,--export-all -Wl, > --enable-auto-image-base -Wl,--output-def=libosp_.def ../*.o > Cannot export _bss_end__: symbol not defined > Cannot export _bss_start__: symbol not defined > Cannot export _data_end__: symbol not defined > Cannot export _data_start__: symbol not defined > Creating library file: libosp.dll.a > collect2: ld returned 1 exit status > > I've seen some messages about the "symbol not defined" error but none > of these brought me closer to a dll. Any additional ideas? > > regards, > Markus > -- > Markus Hoenicka, PhD > UT Houston Medical School > Dept. of Integrative Biology and Pharmacology > 6431 Fannin MSB4.114 > Houston, TX 77030 > (713) 500-6313, -7477 > (713) 500-7444 (fax) > Markus DOT Hoenicka AT uth DOT tmc DOT edu > http://ourworld.compuserve.com/homepages/hoenicka_markus/ > > > -- > Want to unsubscribe from this list? > Check out: http://cygwin.com/ml/#unsubscribe-simple > > -- Want to unsubscribe from this list? Check out: http://cygwin.com/ml/#unsubscribe-simple