Gerhard Niklasch on Wed, 7 Feb 2001 17:16:48 +0100 (MET) |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: pari & cygwin insurmountable difficulty saga! |
In response to: > Message-Id: <200102071527.HAA18372@user5.hushmail.com> > From: hatrick@hushmail.com > Date: Wed, 7 Feb 2001 15:18:28 +0000 (GMT+00:00) > Cannot export __imp_reent_data: symbol not defined > dll_init.o(.text+0x1):dll_init.c: undefined reference to `__imp_reent_data' > Make[1]: *** [libpari.dll] Error 1 Disclaimer: I know nothing at all about CygWin. However, pasting __imp_reent_data into www.google.com came up with the following: http://www.cygwin.com/ml/cygwin/2000-09/msg00812.html ===8<--- Using your suggestion, I changed the following in src/utils/dllinit.c: extern struct _reent *__imp_reent_data; to: extern __declspec(dllimport) struct _reent reent_data; and the '__imp_reent_data' undefined reference problem was solved. --->8=== dllinit.c is built "on the fly" in a sequence of echo commands which come out of config/Makefile.DLLs, at the end: ===8<--- # Windows requires each DLL to have an initialization function # that is called at certain points (thread/process attach/detach). # This one just initializes `_impure_ptr'. dll_init.c: echo '#include <stdio.h>' > dll_init.c echo 'extern struct _reent *_impure_ptr;' >> dll_init.c echo 'extern struct _reent *__imp_reent_data;' >> dll_init.c echo '__attribute__((stdcall))' >> dll_init.c echo 'int dll_entry(int handle, int reason, void *ptr)' >> dll_init.c echo '{ _impure_ptr=__imp_reent_data; return 1; }' >> dll_init.c # The following rule is just there to convince gcc # to keep otherwise unused intermediate targets around. dont_throw_away: dll_fixup.o dll_init.o --->8=== So you may try changing the third of these echo lines as indicated, and rebuild (I guess you have to re-run the configure phase?). (Karim -- any idea whether this change won't break older cygwins?) Hope this helps, Gerhard