Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Message-ID: <3E25A7EE.7050109@kleckner.net> Date: Wed, 15 Jan 2003 10:26:54 -0800 From: Jim Kleckner User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:0.9.4.1) Gecko/20020508 Netscape6/6.2.3 X-Accept-Language: en-us MIME-Version: 1.0 To: cygwin AT cygwin DOT com Subject: Using gcc to build a DLL discovered and linked at runtime Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit 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/