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 Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Subject: RE: Dynamic loading of cygwin dependent dlls Date: Tue, 10 Aug 2004 15:56:38 -0400 Message-ID: <64AE3D5B518E3648ACC823FBCB0B737502767F2E@sr002-2kexc.ateb.com> X-MS-Has-Attach: X-MS-TNEF-Correlator: From: "Reid Thompson" To: "Reid Thompson" , "Peter Ekberg" , X-IsSubscribed: yes Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by delorie.com id i7AJui09000802 actually -- that's not it, as this code, gives the following results: CODE-----------CODE #include #include char *dlls[] = { "pseudostubs.dll", "foo.dll", "psuedostubs.dll", NULL }; int main(void) { int i; void *res; for(i=0; dlls[i]; ++i) { printf("%s\t", dlls[i]); res=dlopen(dlls[i], RTLD_LAZY | RTLD_GLOBAL); if(!res) printf("%s\n", dlerror()); else printf("ok\n"); } return 0; } RESULTS-------------RESULTS pseudostubs.dll dlopen: Win32 error 126 foo.dll ok psuedostubs.dll ok reid > -----Original Message----- > From: Reid Thompson > Sent: Tuesday, August 10, 2004 3:49 PM > To: Peter Ekberg; cygwin AT cygwin DOT com > Subject: RE: Dynamic loading of cygwin dependent dlls > > > take the underscore out of the dll name > > psuedo_stub -> psuedostub > > reid > > > > -----Original Message----- > > From: Peter Ekberg [mailto:peda AT axentia DOT se] > > Sent: Tuesday, August 10, 2004 3:11 PM > > To: cygwin AT cygwin DOT com > > Subject: Re: Dynamic loading of cygwin dependent dlls > > > > > > Christopher Faylor wrote: > > >On Thu, Aug 05, 2004 at 09:09:40AM +0200, Peter Ekberg wrote: > > >>I have read several messages stating that dlopen does not work for > > dlls > > >>that depend on cygwin1.dll. > > >>(e.g. http://sources.redhat.com/ml/cygwin/2004-06/msg01056.html). > > >>I have also understood that this is due to some structures > > not being > > >>initialized in that case. > > >> > > >>Is this dlopen problem limited to non-cygwin apps? I.e. is it true > > >>that an app that depends directly on the cygwin1.dll is > > incapable of > > >>dlopening dlls that depend on cygwin1.dll? > > > > > >No, it is not true. dlopen would be pretty worthless if it > > didn't work > > >in a standard cygwin program. > > > > Indeed. Knowing that it should work, I was inspired to do > > some more tests. > > > > The reason I asked is that the following results in a dll > > that can't be > > dlopened: > > > > foo.c: > > ------------8<--------------- > > __declspec(dllexport) int foo(int bar); > > > > int foo(int bar) > > { > > return bar; > > } > > ------------8<--------------- > > > > Build commands: > > $ gcc -c foo.c > > $ dlltool --dllname pseudo_stubs.dll --exclude-symbols > > DllMain AT 12,_cygwin_dll_entry AT 12,_cygwin_noncygwin_dll_entry AT 12 > ,DllMainCR > > TStartup AT 12,DllEntryPoint AT 12 --output-def foo.def foo.o > > $ dllwrap --dllname pseudo_stubs.dll --output-lib > > pseudo_stubs.dll.a --def foo.def foo.o -L/usr/lib > > > > However, further tests have shown that if I change the name > > pseudo_stubs to foo in the above commands, it works like a > > charm. Like this: > > > > $ gcc -c foo.c > > $ dlltool --dllname foo.dll --exclude-symbols > > DllMain AT 12,_cygwin_dll_entry AT 12,_cygwin_noncygwin_dll_entry AT 12 > ,DllMainCR > > TStartup AT 12,DllEntryPoint AT 12 --output-def foo.def foo.o > > $ dllwrap --dllname foo.dll --output-lib foo.dll.a --def > > foo.def foo.o -L/usr/lib > > > > I use this program to test whether the resulting dll works: > > > > load.c > > ------------8<--------------- > > #include > > #include > > > > char *dlls[] = { > > "pseudo_stubs.dll", > > "foo.dll", > > NULL > > }; > > > > int main(void) > > { > > int i; > > void *res; > > > > for(i=0; dlls[i]; ++i) { > > printf("%s\t", dlls[i]); > > res=dlopen(dlls[i], RTLD_LAZY | RTLD_GLOBAL); > > if(!res) > > printf("%s\n", dlerror()); > > else > > printf("ok\n"); > > } > > > > return 0; > > } > > ------------8<--------------- > > > > I build load.c with "gcc load.c -o load" and ./load produces this > > output: > > pseudo_stubs.dll dlopen: Win32 error 998 > > foo.dll ok > > > > Any help on this would be appreciated. > > > > Cheers, > > Peter Ekberg > > > > > > -- > Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple > Problem reports: http://cygwin.com/problems.html > Documentation: http://cygwin.com/docs.html > FAQ: http://cygwin.com/faq/ > > -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/