"Building runnable image of gryl00010aqep . . .
seterr.obj: In function `seterr':
seterr.c:(.text+0xe):
undefined reference to `iiseterr'
collect2: ld returned 1 exit status
E_AB0020 Link failed
The link failed with status '69891'. This could mean either that the
linker could not be run or that it ran and returned an error.
E_AI0002 The application image was NOT built.
An earlier error prevents the application image from being built.
Correct the cause of the earlier error and then run imageapp again."
Specs which it was tested on and it occurs :
Ingres II 9.2.0 (int.lnx/118)NPTL
openSUSE 11.0 (i586)
Ingres II 9.2.0 (int.lnx/118)NPTL
CentOS release 5.2 (Final)
First I thought that it was linux related but the same error occurred
on Unix and an old ingres version:
Ingres II 2.0/9808 (usl.us5/00)
5 7.1.1 i386 x86at SCO UNIX_SVR5
However using the following specs the error does not appear and
linking succeeds :
Specs where there was no problem :
Ingres II 2.5/0011
SCO_SV 3.2 5.0.7 i386
Ingres II 2.5/0011
SCO_SV 3.2 5.0.5 i386
Ingres II 2.0/0308 (hpb.us5/00)
HP-UX 11.00
The problem lies in calling the 'iiseterr' function.Apparently, the
linker on the machines with the problem cannot find a reference to it.
The related entry in the manual (r3 Documentation, Forms-based
Application Development Tools, User Guide Runtime Error Processing M–
3, Using iiseterr() in Ingres Applications,page 1243) is :
seterr ()
{
extern int myhandler();
iiseterr (myhandler);
return;
}
In examining some C header (eqpname.h in particular) files I've
noticed that all references to iiseterr were IIseterr. Subsequently
changing the entry to IIseterr solved the problem, the linking
succeeded plus it did not break the specs that had no problem to begin
with. So the correct entry which works universally is :
seterr ()
{
extern int myhandler();
IIseterr (myhandler);
return;
}
The question is why the same entry in some cases breaks and in some
not?