This is the mail archive of the cygwin@cygwin.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Using gcc to build a DLL discovered and linked at runtime


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/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]