cygwin.rules - Enabling shared libXt finally?

Harold L Hunt II huntharo@msu.edu
Wed Oct 1 20:24:00 GMT 2003


Alexander Gottwald wrote:

> On Wed, 1 Oct 2003, Harold L Hunt II wrote:
> 
> 
>>Alexander Gottwald wrote:
>>
>>>Have you tested this with programs which uses libXt and some widgets from
>>>another library?
>>
>>Yeah, that is what I was saying above.  I built a shared version, made 
>>some changes, and rebuilt some clients (xman.exe, xcalc.exe, etc.), but 
>>they keep giving the unresolved inheritence error as above.
> 
> 
> The location of _XtInherit still differs in dll and program. 
> 
> 
>>Actually, if you look at 
>>xc/config/cf/ibmLib.rules/SharedLibraryTarget(), you see that 
>>sharedlib.o (which is contained in $(UNSHAREDOBJS)) is linked directly 
>>into the import library, not into the shared library.  The idea is that 
>>each application linked against libXt should end up with one copy of the 
>>sharedlib.o code.  Thus, comparisons against _XtInherit will work just 
>>fine within one application, which is the only case that we are 
>>concerned with.
> 
> 
> no. The structures of the dll are initialized with dll_base + x and the 
> structures from the program are inititalized with program_base + y. Even
> if we find a way to have x == y, the symbols still differ because the 
> dll is placed on a different place than the program.
> 
> Simple testprogram:
> 
> --x.h
> typedef void (*func)(void);
> extern void _XtInherit(void);
> typedef struct { func callback; } x;
> extern x x1, x2;
> --xtinherit.c
> #include "x.h"
> void _XtInherit(void) {
> }
> --x1.c
> #include "x.h"
> x x1 = { _XtInherit };
> --x2.c
> #include "x.h"
> x x2 = { _XtInherit };
> --xtest.c
> #include "x.h"
> #include <stdio.h>
> 
> int main(void) {
>     printf("x1.callback: %p\n", x1.callback);
>     printf("x2.callback: %p\n", x2.callback);
>     return 0;
> }
> --build.sh
> gcc -shared -o x1.dll x1.c xtinherit.c
                  ^^^^^^      ^^^^^^^^^^^

That is the crux of my whole argument, and I believe it is what Alan was 
trying to tell me to do.  You do *not* link xtinherit.c/o into x1.dll. 
Instead, only for demonstration purposes, you can link it directly into 
any executables that link to x1.dll.

What is your response to that?

Harold



> gcc -o xtest.exe xtest.c x2.c xtinherit.c x1.dll
> gcc -o xtest2.exe xtest.c x2.c x1.dll
> --output xtest.exe
> x1.callback: 0x10001010  
> x2.callback: 0x4010d0
> --output xtest2.exe
> x1.callback: 0x10001010
> x2.callback: 0x401750
> 
> bye
> 	ago



More information about the Cygwin-xfree mailing list