This is the mail archive of the
cygwin@cygwin.com
mailing list for the Cygwin project.
Re: Using gcc to build a DLL discovered and linked at runtime
- From: "Larry Hall (RFK Partners, Inc)" <lhall at rfk dot com>
- To: Jim Kleckner <jek-cygwin at kleckner dot net>,cygwin at cygwin dot com
- Date: Wed, 15 Jan 2003 16:15:21 -0500
- Subject: 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/