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]

Re: Using gcc to build a DLL discovered and linked at runtime


At 01:26 PM 1/15/2003, Jim Kleckner wrote:
>  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


I assume the reason you're using the -mno-cygwin flag is because of 
Chris's comment.  Clearly what you're trying to do won't work if you 
link against the Cygwin DLL.  Using -mno-cygwin should remove cygwin1.dll
from the equation but just substituting MSCVRT.DLL for cygwin1.dll doesn't
mean that MSCVRT.DLL will load dynamically either.  I dunno but judging
by the fact that you're still having troubles, the assumption is suspect.  
However, since you're no longer linking against cygwin1.dll (which isn't 
going to work), you're really just using the mingw pseudo cross compiler of 
Cygwin's gcc (the -mno-cygwin switch) to produce a straight Win32 DLL.  In 
this context, it's really not a Cygwin question anymore (you could use 
mingw's gcc and presumably see the same problem... if not, then maybe that's 
your solution).  I'd recommend following up on this at mingw-users@mingw.org 
if the mingw site doesn't have a solution for this problem.

Good luck,


Larry Hall                              lhall@rfk.com
RFK Partners, Inc.                      http://www.rfk.com
838 Washington Street                   (508) 893-9779 - RFK Office
Holliston, MA 01746                     (508) 893-9889 - FAX


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