delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2002/05/06/20:09:39

Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sources.redhat.com/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sources.redhat.com/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
From: "Robert Kroeger" <rjkroege AT liqui DOT org>
To: <cygwin AT cygwin DOT com>
Subject: dllhelpers-0.4.0 doesn't work for me - any ideas?
Date: Mon, 6 May 2002 17:07:44 -0700
Message-ID: <LDEAINIKDOCNHJPGDMKAKECFCGAA.rjkroege@liqui.org>
MIME-Version: 1.0
X-Priority: 3 (Normal)
X-MSMail-Priority: Normal
Importance: Normal
X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4522.1200

Summary:

I am trying to figure out how to build a dll with the cygwin tools.

I consulted the list archives and proceeded to download dllhelpers-0.4.0.  I
assumed that a working example would reveal everything that I needed to
know.

The examples don't work for me as described: global variables are not
successfully exported, only functions are exported.  (details below)

Does this happen to anybody else?

Any idea what I'm doing wrong? My impression from searching the list
archives is that this issue was fixed some time ago.  Am I mistaken in this
understanding?


Rob Kroeger
rjkroege AT liqui DOT org

----

Messy details:

I get the same results for cygwin installs on two different cygwin installs
(though from the same mirror), (cygcheck -c output at bottom)

Here's what happens (all in the 'c' example -- to keep things as simple as
possible):

$ make
gcc -c  -I. -g -Wall  -o cdll.o cdll.c
gcc -shared -Wl,--out-implib=libcdll.dll.a \
-o cygcdll.dll cdll.o  -Wl,--export-all-symbols
Creating library file: libcdll.dll.a
gcc -c -I. -g -Wall  -o usedll.o usedll.c
gcc -o usedll.exe -g -Wall   usedll.o -L./ -lcdll
usedll.o: In function `main':
/home/rjkroege/docs/dllhelpers-0.4.0/c/usedll.c:9: undefined reference to
`dll_global_int_var'
/home/rjkroege/docs/dllhelpers-0.4.0/c/usedll.c:12: undefined reference to
`dll_global_int_var'
/home/rjkroege/docs/dllhelpers-0.4.0/c/usedll.c:14: undefined reference to
`dll_global_int_var'
/home/rjkroege/docs/dllhelpers-0.4.0/c/usedll.c:19: undefined reference to
`dll_global_int_var'
collect2: ld returned 1 exit status
make: *** [usedll.exe] Error 1

Obviously, dll_global_int_var is not exported in libcdll.dll.a.

If I remove references to dll_global_int_var from usedll.c, everything links
and runs fine -- so the example works fine for function symbols but not for
data symbols.

If I change the defn of dll_global_int_var to

extern __declspec(dllimport) int dll_global_int_var;

in the importer and

int __declspec(dllexport ) dll_global_int_var = 99; in the exporter,

then once again everything works fine.

Further confounding me, nm generates identical results for libcdll.dll.a and
cygdll.dll both WITH and WITHOUT the presence of __declspec.


abbreviated cygcheck -c:

Cygwin Package Information Package             Version
ash                 20011018-1
bash                2.05a-3
binutils            20011001-1
cygutils            1.0.0-1
cygwin              1.3.10-1
cygwin-doc          1.0-1
dllhelpers          0.4.0
gcc                 2.95.3-5
libtool             20010531a-1
libtool-devel       20020202-1
libtool-stable      1.4.2-2
make                3.79.1-6


--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Bug reporting:         http://cygwin.com/bugs.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