There are places in codegen.c which emit pointers to the cob_file and cob_file_key structures.
Also some code is emited that references those booleans...
For example:
codegen.c: output_storage ("static cob_file_key\t*%s%s = NULL;\n",
codegen.c: output_local ("static cob_file_key\t*%s%s = NULL;\n",
codegen.c: output_storage ("static cob_file\t\t*%s%s = NULL;\n",
codegen.c: output_local ("static cob_file\t\t*%s%s = NULL;\n",
codegen.c: output_line ("cob_file_external_addr (\"%s\", &%s%s, %s, %d, %d);",
codegen.c: output_line ("cob_file_malloc (&%s%s, %s, %d, %d);",
codegen.c: output_line ("cob_file_free (&%s%s,%s);",CB_PREFIX_FILE, fl->cname,key_ptr);
codegen.c: output ("%s%s->tf_duplicates = 0;\n", CB_PREFIX_KEYS, f->cname);
codegen.c: output ("(%s%s + %d)->tf_duplicates = %d;\n", CB_PREFIX_KEYS,
codegen.c: output ("(%s%s + %d)->tf_suppress = %d;\n", CB_PREFIX_KEYS,
codegen.c: f->cname, nkeys, l->tf_suppress);
So the code generated by the compiler must match up exactly with the code in libcob.
Since, libcob is normally a shared library that means that all programs compiled by GnuCOBOL must have matching structures referenced in the compiled COBOL modules as well as the runtime library.