delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2000/09/27/11:55:43

Mailing-List: contact cygwin-help AT sourceware DOT cygnus DOT com; run by ezmlm
List-Subscribe: <mailto:cygwin-subscribe AT sources DOT redhat DOT com>
List-Archive: <http://sources.redhat.com/ml/cygwin/>
List-Post: <mailto:cygwin AT sources DOT redhat DOT com>
List-Help: <mailto:cygwin-help AT sources DOT redhat DOT com>, <http://sources.redhat.com/ml/#faqs>
Sender: cygwin-owner AT sources DOT redhat DOT com
Delivered-To: mailing list cygwin AT sources DOT redhat DOT com
Importance: Normal
Subject: RE: Linking in WSAGetLastError
To: "Michael Olson" <olson AT cs DOT odu DOT edu>
Cc: <cygwin AT sourceware DOT cygnus DOT com>
X-Mailer: Lotus Notes Release 5.0.3 (Intl) 21 March 2000
Message-ID: <OF21C1D4E7.08EDCBF4-ON85256967.005325D8@raleigh.ibm.com>
From: "Ed Bradford/Raleigh/IBM" <egb AT us DOT ibm DOT com>
Date: Wed, 27 Sep 2000 11:53:46 -0400
X-MIMETrack: Serialize by Router on D04NMS90/04/M/IBM(Release 5.0.3 (Intl)|21 March 2000) at
09/27/2000 11:53:47 AM
MIME-Version: 1.0

Not quite. I am running a "newer" version of Windows -- one you will be
able to get in October or so. I want
to build interface libraries for some of the DLL's for which Microsoft has
not yet delivered
the .lib files. Working through the document you mentioned below, there
seems to be some missing information.

========mandel_dll.c===========================================
#include <windows.h>

int mandel(double a, double b, double c, double d, int e)
{
     int i;
     double x,y,x1,y1;

     x = a;
     y = b;
     for(i = 0; i < e; i++) {
          x1 = x*x + y*y;
          y1 = -2 * x * y;
          if( (x1*x1 + y1*y1) > 1.0)
               break;
          x = x1 + c;
          y = y1 + d;
     }
     return i;
}
int WINAPI
mandel_init(HANDLE h, DWORD reason, void *foo) {
     return 1;
}
===============================================================

This is a simple one function dll.

     gcc -c mandel_dll.c
     gcc -s -Wl,--base-file,mandel_dll.base -o mandel_dll.dll mandel_dll.o
-Wl,-e,_mandel_init AT 12

produces the following on my Win2K SP1 system:

/usr/lib/libcygwin.a(libcmain.o)(.text+0x6a):libcmain.c: undefined
reference to
`WinMain AT 16'
collect2: ld returned 1 exit status
~/src/cyg $

I'm not sure what is going on here. I try this to understand how dll's are
made with gcc/dlltool.

Sorry to be so obtuse. (See you in Zihuatanejo.)

Ed

Your Windows 2000 Arborist
T/L 589-4410; Outside: 1-919-993-4410
egb AT us DOT ibm DOT com


"Michael Olson" <olson AT cs DOT odu DOT edu> on 09/27/2000 10:12:47 AM

To:   Ed Bradford/Raleigh/IBM AT IBMUS
cc:   <cygwin AT sourceware DOT cygnus DOT com>
Subject:  RE: Linking in WSAGetLastError



To link with a DLL (Like user32.dll) you need an import library which is
what -luser32
is linking your program to. Doc's on how to build dll's and import
libraries
are here
http://sources.redhat.com/cygwin/cygwin-ug-net/dll.html

Is that what you were looking for?

-- Mike

----------------
Michael Olson
olson AT cs DOT odu DOT edu
----------------

-----Original Message-----
From: cygwin-owner AT sources DOT redhat DOT com
[mailto:cygwin-owner AT sources DOT redhat DOT com]On Behalf Of Ed
Bradford/Raleigh/IBM
Sent: Wednesday, September 27, 2000 9:43 AM
To: DJ Delorie
Cc: cygwin AT sourceware DOT cygnus DOT com
Subject: Re: Linking in WSAGetLastError


I'm missing something here. If the CYGWIN libraries don't export functions
(aren't current with MS API's) then
you simply can't use the function. At least that's what I thought. After a
few simple experiments, I find that I might be wrong. Is there something
written somewhere that describes the relationship between
     gcc msg.c
and the Microsoft libraries? For instance, using gcc -v I see no references
to the mssdk libraries. Is that
because there isn't any? Here is my simple "msg.c" program:

     #include <windows.h>

     int main(int ac, char *av[])
     {
          MessageBox(NULL, "Messsage", "Title", MB_OK);
          return 0;
     }

It compiles with either
     cl msg.c user32.lib -o msg-cl.exe
or
     gcc msg.c -o msg-gcc
Both compile, link and execute properly. More precisely,

   gcc -c msg.c
   ld -Bdynamic /lib/crt0.o msg.o -L/usr/lib/gcc-lib/i686-pc-cygwin/2.95.2
   -luser32 -lcygwin -lkernel32

produces a correctly working executable. Here, all the "-l" things refer to
/lib/libXXX.a modules. Substituting
//e/mssdk/lib/user32.lib for the "-luser" in the ld line, results in an
undefined reference to MessageBoxA
which is what I would expect.

As you can see, I am a bit confused. Any pointers to writeups on how all
the gcc libraries and
Windows libraries fit together would be greately appreciated. Also, I
wouldn't mind writing some of this
up once I understand it.

Thank you
Ed Bradford



Your Windows 2000 Arborist
T/L 589-4410; Outside: 1-919-993-4410
egb AT us DOT ibm DOT com


DJ Delorie <dj AT delorie DOT com>@sources.redhat.com on 09/26/2000 09:33:12 PM

Sent by:  cygwin-owner AT sources DOT redhat DOT com


To:   olson AT cs DOT odu DOT edu
cc:   cygwin AT sourceware DOT cygnus DOT com
Subject:  Re: Linking in WSAGetLastError




> conf.o(.text+0x2c74):conf.c: undefined reference to `WSAGetLastError'

They don't export WGAGetLastError.  They export WSAGetLastError AT 0.
This means that you aren't including the proper headers (winsock.h),
and it's defaulting to cdecl instead of stdcall (WINAPI) calling
conventions.

--
Want to unsubscribe from this list?
Send a message to cygwin-unsubscribe AT sourceware DOT cygnus DOT com




--
Want to unsubscribe from this list?
Send a message to cygwin-unsubscribe AT sourceware DOT cygnus DOT com




--
Want to unsubscribe from this list?
Send a message to cygwin-unsubscribe AT sourceware DOT cygnus DOT com

- Raw text -


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