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 Delivered-To: mailing list cygwin AT cygwin DOT com Message-ID: <3C61ED02.3060204@watsen.net> Date: Wed, 06 Feb 2002 18:57:06 -0800 From: Kent Watsen User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:0.9.8) Gecko/20020204 X-Accept-Language: en-us MIME-Version: 1.0 To: cygwin AT cygwin DOT com Subject: Re: dlopen(0, RTLD_LAZY) doesn't work? References: <3C61E3C1 DOT 9010200 AT watsen DOT net> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit 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 #include 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 > #include > #include > > 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/