December 31, 2002
What does it mean? ("Warning 140: Library probably needs FIXLIB")

// file 1
int a;


// file 2
extern int a;
static int *b = &a;

void f()
{ }


compile both files and create a static library (lib -c ...)

// main
extern void f();

int main()
{
  f();
}


compiled and trying to link with the library I get:

Warning 140: Library probably needs FIXLIB Error 42: Symbol Undefined ?a@@3HA (int a)


Workaround: write "int a = 0;" instead of "int a;" in file 1.


bye, Christof

-- 
http://cmeerw.org                                 JID: cmeerw@jabber.at mailto cmeerw at web.de

...and what have you contributed to the Net?
December 31, 2002
I don't know what is meant by fixlib. However, the declaration:
    int a;
generates a COMDAT which is not put into the symbol table in the library,
and is not used to satisfy unresolved externals unless something else in
that module is pulled in. This is not a bug, it is a deliberate way of doing
things. The runtime library depends on it, for example.

"Christof Meerwald" <cmeerw@web.de> wrote in message news:ausjsp$102c$2@digitaldaemon.com...
> What does it mean? ("Warning 140: Library probably needs FIXLIB")
>
> // file 1
> int a;
>
>
> // file 2
> extern int a;
> static int *b = &a;
>
> void f()
> { }
>
>
> compile both files and create a static library (lib -c ...)
>
> // main
> extern void f();
>
> int main()
> {
>   f();
> }
>
>
> compiled and trying to link with the library I get:
>
> Warning 140: Library probably needs FIXLIB
> Error 42: Symbol Undefined ?a@@3HA (int a)
>
>
> Workaround: write "int a = 0;" instead of "int a;" in file 1.
>
>
> bye, Christof
>
> --
> http://cmeerw.org                                 JID: cmeerw@jabber.at mailto cmeerw at web.de
>
> ...and what have you contributed to the Net?