OK, so I've written the windows equivalent of my original program and still get the same error - is there some linking option I'm missine?
Here is the new code, again just compile (gcc foo.c) and run (foo.exe): #include <stdio.h> #include <windows.h> extern __declspec(dllexport) void foo(void) { printf("hello\n"); } int main(int argc, char *argv[]) { void* dl = NULL; void* func = NULL; dl = (void *) GetModuleHandle (NULL); if (dl == NULL) { printf("GetModuleHandle() failed\n"); exit(0); } func = (void*)GetProcAddress((HMODULE)dl, "foo"); if (func == NULL) { printf("GetProcAddress() failed (code %u)\n", GetLastError()); exit(0); } printf("do something meaningful\n"); return 0; } Kent Watsen wrote: > > Hi, > > I've read the mailing list archives and searched google trying > to figure out how to get the following program to work. All > you have to do is save it to a file (foo.c), compile (gcc foo.c), > and run - I always get "dlsym() failed." > > Note, I have tried many variations of extern and _declspec > as well as looking for "_foo" in addition to "foo" ("nm a.exe | > grep foo" returned "0040104c T _foo"... > > Here is the code - help would be greatly appreciated - thanks! > > #include <stdio.h> > #include <dlfcn.h> > #include <windows.h> > > extern __declspec(dllexport) void foo(void) > { > printf("hello\n"); > } > > int main(int argc, char *argv[]) > { > void* dl = NULL; > void* func = NULL; > > dl = dlopen(0 , RTLD_LAZY); > if (dl == NULL) { > printf("dlopen() failed\n"); > exit(0); > } > > func = dlsym(dl, "foo"); > if (func == NULL) { > printf("dlsym() failed\n"); > exit(0); > } > > printf("do something meaningful\n"); > > dlclose(dl); > return 0; > } > > > > > -- > 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/ > -- 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/