Using gcc to build a DLL discovered and linked at runtime

Jim Kleckner jek-cygwin@kleckner.net
Wed Jan 15 21:57:00 GMT 2003


  I'm using a program called TradeStation that allows
specifying a path name to a DLL, specifying the
signature of a function to call, and then
loading/calling that function.  The documentation is
very sparse for how to do this and probably built in
some way that depends in an obscure way on having a
Microsoft compiler such as VisualC++ or VisualBasic to
work properly.  I am trying to use GCC under cygwin to
create a DLL that will dynamically open and running
into roadblocks.

A simple test file test.cpp:
  #include "windef.h"
  extern int __stdcall PPI(int);

  __declspec(dllexport) int __stdcall PPI(int notused)
  {
      return 1;
  }

commands used:
  gcc -shared -mno-cygwin -Wl,--export-dynamic -Wl,--export-all-symbols  
-c vmi.cpp
  dlltool -e exports.o vmi.o -l vmi.lib
  gcc -shared -mno-cygwin -Wl,--export-dynamic -Wl,--export-all-symbols  
-shared exports.o vmi.o -o vmi.dll

The program just says "can't load user function".

I have tried various combinations of commands but am
wondering if there is something I'm missing.  I'm
hoping to avoid getting out the ancient copy of VC5
from my shelf...

I will append cyg

Thanks - Jim


Resources for future travelers down this path:

I have looked at a variety of sources describing
using cygwin/gcc tools to build DLLs.

The manual is here:
  http://www.cygwin.com/cygwin-ug-net/dll.html

This message contains a bug report with a complex
example that is interesting to examine:
  http://www.cygwin.com/ml/cygwin/2000-05/msg00663.html

This one describes a "ld/dlltool/ld/dlltool/ld trick":
  http://www.cygwin.com/ml/cygwin/2002-08/msg01002.html
It suggests that what I am trying to do should be
possible by just using the -shared flag.

Christopher Faylor indicates that the cygwin dll
cannot be linked at runtime because it is broken:
  http://www.cygwin.com/ml/cygwin/2002-08/msg01042.html

The dllhelpers stuff is also useful:
  http://www.neuro.gatech.edu/users/cwilson/cygutils/dll-stuff/index.html




Output of cygcheck -s:

Cygwin Win95/NT Configuration Diagnostics
Current System Time: Wed Jan 15 07:03:32 2003

Windows 2000 Professional Ver 5.0 Build 2195 Service Pack 3

Path:     C:\cygwin\usr\local\bin
    C:\cygwin\bin
    C:\cygwin\bin
    C:\cygwin\bin
    c:\WINNT\system32
    c:\WINNT
     c:\WINNT\System32\Wbem
    c:\Jim\bin
    c:\Program Files\Perforce
    c:\WinUnix\bin
     C:\cygwin\usr\X11R6\bin

SysDir: C:\WINNT\System32
WinDir: C:\WINNT

HOME = `c:\Jim '
MAKE_MODE = `unix'
USER = `jim'

Use `-r' to scan registry

c:  hd  NTFS   19053Mb  78% CP CS UN PA FC     
d:  cd           N/A    N/A                    

.                                  /cygdrive                 user    
textmode,cygdrive
C:\cygwin                          /                         system  
textmode
c:                                 /cygdrive/c               system  
textmode
C:\cygwin/bin                      /usr/bin                  system  
textmode
C:\cygwin/lib                      /usr/lib                  system  
textmode
C:\cygwin\usr\X11R6\lib\X11\fonts  /usr/X11R6/lib/X11/fonts  system  binmode
.                                  /cygdrive                 user    
textmode,cygdrive

Found: C:\cygwin\bin\bash.exe
Found: C:\cygwin\bin\cat.exe
Found: C:\cygwin\bin\cpp.exe
Found: C:\cygwin\bin\find.exe
Found: C:\cygwin\bin\gcc.exe
Found: C:\cygwin\bin\gdb.exe
Found: C:\cygwin\bin\ld.exe
Found: C:\cygwin\bin\ls.exe
Found: C:\cygwin\bin\make.exe
Found: C:\cygwin\bin\sh.exe

   58k 2002/05/07 C:\cygwin\bin\cygbz2-1.dll
    6k 2002/06/24 C:\cygwin\bin\cygcharset-1.dll
  847k 2003/01/09 C:\cygwin\bin\cygcrypto-0.9.7.dll
  644k 2002/12/08 C:\cygwin\bin\cygcrypto.dll
  136k 2002/10/17 C:\cygwin\bin\cygexpat-0.dll
   50k 2002/03/17 C:\cygwin\bin\cygexslt-0.dll
   45k 2001/04/25 C:\cygwin\bin\cygform5.dll
   35k 2002/01/09 C:\cygwin\bin\cygform6.dll
   19k 2002/02/20 C:\cygwin\bin\cyggdbm.dll
  490k 2002/09/21 C:\cygwin\bin\cygguile-12.dll
  488k 2002/07/18 C:\cygwin\bin\cygguile-14.dll
   63k 2002/07/18 C:\cygwin\bin\cygguile-srfi-srfi-13-14-1.dll
   63k 2002/09/21 C:\cygwin\bin\cygguile-srfi-srfi-13-14-v-1-1.dll
   24k 2002/07/18 C:\cygwin\bin\cygguile-srfi-srfi-4-1.dll
   24k 2002/09/21 C:\cygwin\bin\cygguile-srfi-srfi-4-v-1-1.dll
   14k 2002/07/18 C:\cygwin\bin\cygguilereadline-14.dll
   14k 2002/09/21 C:\cygwin\bin\cygguilereadline-v-12-12.dll
   17k 2001/06/28 C:\cygwin\bin\cyghistory4.dll
   20k 2002/10/10 C:\cygwin\bin\cyghistory5.dll
  306k 2002/04/27 C:\cygwin\bin\cyghttpd.dll
  929k 2002/06/24 C:\cygwin\bin\cygiconv-2.dll
   22k 2001/12/13 C:\cygwin\bin\cygintl-1.dll
   28k 2002/09/20 C:\cygwin\bin\cygintl-2.dll
   21k 2001/06/20 C:\cygwin\bin\cygintl.dll
  119k 2002/02/09 C:\cygwin\bin\cygjpeg6b.dll
   59k 2002/09/20 C:\cygwin\bin\cygkpathsea-3-3-7.dll
   32k 2003/01/04 C:\cygwin\bin\cygltdl-3.dll
   26k 2001/04/25 C:\cygwin\bin\cygmenu5.dll
   20k 2002/01/09 C:\cygwin\bin\cygmenu6.dll
  156k 2001/04/25 C:\cygwin\bin\cygncurses++5.dll
  175k 2002/01/09 C:\cygwin\bin\cygncurses++6.dll
  226k 2001/04/25 C:\cygwin\bin\cygncurses5.dll
  202k 2002/01/09 C:\cygwin\bin\cygncurses6.dll
   15k 2001/04/25 C:\cygwin\bin\cygpanel5.dll
   12k 2002/01/09 C:\cygwin\bin\cygpanel6.dll
   40k 2001/11/21 C:\cygwin\bin\cygpcre.dll
   39k 2001/11/21 C:\cygwin\bin\cygpcreposix.dll
  175k 2002/07/22 C:\cygwin\bin\cygpng10.dll
   22k 2002/06/09 C:\cygwin\bin\cygpopt-0.dll
  108k 2001/06/28 C:\cygwin\bin\cygreadline4.dll
  127k 2002/10/10 C:\cygwin\bin\cygreadline5.dll
   66k 2001/11/20 C:\cygwin\bin\cygregex.dll
  177k 2003/01/09 C:\cygwin\bin\cygssl-0.9.7.dll
  165k 2002/12/08 C:\cygwin\bin\cygssl.dll
  550k 2002/12/19 C:\cygwin\bin\cygtcl83.dll
   12k 2002/12/19 C:\cygwin\bin\cygtclpip83.dll
  253k 2002/02/10 C:\cygwin\bin\cygtiff3.dll
  217k 2002/12/19 C:\cygwin\bin\cygtix4183.dll
  830k 2002/12/19 C:\cygwin\bin\cygtk83.dll
  633k 2002/07/22 C:\cygwin\bin\cygxml2-2.dll
  152k 2002/03/17 C:\cygwin\bin\cygxslt-1.dll
   15k 2002/03/17 C:\cygwin\bin\cygxsltbreakpoint-1.dll
   50k 2002/03/12 C:\cygwin\bin\cygz.dll
  880k 2002/12/25 C:\cygwin\bin\cygwin1.dll
    Cygwin DLL version info:
        DLL version: 1.3.18
        DLL epoch: 19
        DLL bad signal mask: 19005
        DLL old termios: 5
        DLL malloc env: 28
        API major: 0
        API minor: 69
        Shared data: 3
        DLL identifier: cygwin1
        Mount registry: 2
        Cygnus registry name: Cygnus Solutions
        Cygwin registry name: Cygwin
        Program options name: Program Options
        Cygwin mount registry name: mounts v2
        Cygdrive flags: cygdrive flags
        Cygdrive prefix: cygdrive prefix
        Cygdrive default prefix:
        Build date: Wed Dec 25 15:37:50 EST 2002
        Shared id: cygwin1S3

   41k 2002/05/14 C:\cygwin\usr\X11R6\bin\cygPropList-0.dll

Cygwin Package Information
Package             Version             
ELFIO               1.0.0-1             
WindowMaker         0.80.0-2            
XFree86-base        4.2.0-1             
XFree86-bin         4.2.0-2             
XFree86-etc         4.2.0-1             
XFree86-fenc        4.2.0-2             
XFree86-fnts        4.2.0-2             
XFree86-lib         4.2.0-3             
XFree86-startup-scripts4.2.0-3             
XFree86-xserv       4.2.0-15            
_update-info-dir    00120-1             
apache              1.3.24-5            
ash                 20020731-1          
astyle              1.15.3-3            
autoconf            2.54-1              
autoconf-devel      2.57-1              
autoconf-stable     2.13-4              
automake            1.7.1-1             
automake-devel      1.7.2-1             
automake-stable     1.4p5-5             
base-files          1.1-1               
base-passwd         1.0-1               
bash                2.05b-8             
binutils            20021117-1          
bison               1.75-1              
byacc               1.9-1               
bzip2               1.0.2-2             
ccache              1.9-1               
clear               1.0-1               
crypt               1.0-1               
ctags               5.2-1               
cvs                 1.11.0-1            
cygutils            1.1.3-1             
cygwin              1.3.18-1            
cygwin-doc          1.2-1               
dejagnu             20021217-2          
diff                1.0-1               
diffutils           2.8.1-1             
dpkg                1.10.4-2            
enscript            1.6.3-3             
expat               1.95.5-1            
expect              20021218-1          
file                3.37-1              
fileutils           4.1-1               
findutils           4.1.7-4             
flex                2.5.4-2             
gawk                3.1.1-5             
gcc                 3.2-3               
gcc-mingw           20020817-5          
gdb                 20021218-1          
gdbm                1.8.0-4             
gettext             0.11.5-1            
gettext-devel       0.11.5-1            
gperf               2.7.2-1             
grep                2.5-1               
groff               1.18.1-2            
gsl                 1.3-1               
guile               1.6.0-1             
guile-devel         1.6.0-1             
gzip                1.3.3-4             
indent              2.2.8-1             
inetutils           1.3.2-20            
jpeg                6b-7                
less                378-1               
libPropList         0.10.1-3            
libbz2_1            1.0.2-2             
libcharset1         1.8-2               
libguile12          1.6.0-1             
libguile14          1.5.6-5             
libiconv            1.8-2               
libiconv2           1.8-2               
libintl             0.10.38-3           
libintl1            0.10.40-1           
libintl2            0.11.5-1            
libkpathsea3        20020911-1          
libltdl3            20030103-1          
libncurses5         5.2-1               
libncurses6         5.2-8               
libpng10            1.0.14-2            
libpopt0            1.6.4-4             
libreadline4        4.1-2               
libreadline5        4.3-2               
libtool             20020705-1          
libtool-devel       20030103-1          
libtool-stable      1.4.3-1             
libxml2             2.4.23-1            
libxslt             1.0.13-1            
links               0.96-1              
login               1.7-1               
lynx                2.8.4-5             
m4                  1.4-1               
make                3.79.1-7            
man                 1.5j-1              
mingw-runtime       2.3-1               
mktemp              1.4-1               
mod_auth_ntsec      1.7-1               
mod_dav             1.0.3-1.3.6-1       
mod_ssl             2.8.8-1.3.24-1      
ncftp               3.1.4-1             
ncurses             5.2-8               
newlib-man          20020801            
openbox             0.99.1-3            
openssh             3.5p1-3             
openssl             0.9.7-1             
openssl-devel       0.9.7-1             
openssl096          0.9.6h-1            
pcre                3.7-1               
perl                5.6.1-2             
pkgconfig           0.14.0-1            
popt                1.6.4-4             
postgresql          7.3.1-1             
rcs                 5.7-3               
readline            4.3-2               
regex               4.4-2               
rsync               2.5.5-2             
sed                 4.0.5-1             
sh-utils            2.0.15-3            
sharutils           4.2.1-2             
swig                1.3.16-1            
tar                 1.13.25-1           
tcltk               20021218-1          
termcap             20020930-1          
terminfo            5.2-3               
tetex-devel         20020911-1          
texinfo             4.2-4               
textutils           2.0.21-1            
tiff                3.5.7-1             
time                1.7-1               
unzip               5.50-1              
vim                 6.1-2               
w32api              2.1-1               
which               1.5-1               
zip                 2.3-2               
zlib                1.1.4-1             

Use -h to see help about each section
   



--
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/



More information about the Cygwin mailing list