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: RESOLVED: Using gcc to build a DLL discovered and linked at runtime


After carefully inspecting the symbols from
generated dlls and dlls provided by TradeStation,
I found that symbols occurred with and without the
@decorations.  e.g. PPI@4 and PPI.

Adding -Wl,--add-stdcall-alias to the gcc line,
all worked fine.

Could this generally be a requirement for dlls
that are opened at runtime in a fashion similar to
dlopen?  If so, then some FAQ annotation would be
in order here:
 http://www.cygwin.com/cygwin-ug-net/dll.html

Jim


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


[snip]



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