In article <4kcfi8$ka7@ren.fp.co.nz>, webbj@fp.co.nz says... > >Does anyone know what scope the global variables in a C procedure >compiled from ABF is? They are global to the whole image, if they're not static. For example, if you have int my_total = 0; int my_proc(int value) { return my_total += value; } in a C procedure defined to ABF, my_total and my_proc are completely global, and you could refer to them in another C procedure. If they are redefined in another C procedure, linking errors will occur. >We are getting these strange linking errors when trying >to compile an image and the offending symbols seem to be the global >variables (that is, those variables global to the C procedure itself). ABF's linking is quite straightforward, (except that the link commands can be enormous for a large application), and the symbols it generates in its C code are usually prefixed with II. Perhaps your C procedures are including headers that clash with library routines that Ingres use, or require libraries that redefine routines used by Ingres. If your C procedures are redefining globals, it sounds like somebody's been sloppy and the addition of a few "extern" or "static" keywords would help. If you really need to track this down, you may have to get into your linker's man page (or equivalent) and modify $II_SYSTEM/ingres/files/utld.def to set flags that will tell you what's going on. -- John Little Auckland, New Zealand, phone (64) (9) 575 4621 e-mail jlittle@iconz.co.nz
© William Yuan 2000