objinfo
 

fbc stores extra information into the object files (.o) it generates, in order to read it out again at link-time. The information that is stored currently consists of the -lang/-mt settings and all libraries/search paths (-l, #inclib, -p, #libpath) that were specified when compiling that object file. This way fbc can show a warning when mixing object files that were compiled with different options, because they may be incompatible, and fbc can automatically link in libraries that were specified via #inclib, even if the user compiles and links in separate steps.

This is accomplished by emitting an extra section called "fbctinf" (FreeBASIC compile time information?) when compiling, and using libbfd at link-time to find out whether object files contain that section, and if so, reading it in. Furthermore, when building a static library, fbc creates an extra object file (called __fb_ct.inf) containing just that extra information and adds it to the library. At link-time fbc looks at each library (using libbfd again) to figure out whether it has such an __fb_ct.inf file or not.

This feature heavily relies on libbfd, which can cause problems when building fbc, because libbfd does not exactly have a stable interface. Different versions are usually incompatible. That's why fbc has a small wrapper written in C, so it can use the original bfd.h, instead of relying on translated bfd.bi's. That way, you're less likely to run into libbfd-related compatibility problems. Each system (Linux and BSD distributions, MinGW, DJGPP) has their own version of libbfd, sometimes shared, sometimes static, and require different additional libraries to get libbfd working.

Besides these technical problems, there can be legal issues too. Quoting from FreeBASIC/src/compiler/INSTALL:
Take care when linking to the BFD library. Newer versions are licensed under GNU GPL version 3 (or later) and can not be legally combined with FreeBASIC's compiler source which is licensed under GNU GPL version 2 (or later). Statically linking to libbfd.a will likely require that it be no greater than version 2.17. However, there are no known licensing conflicts if the FreeBASIC compiler is linked to a shared version of the BFD library.

To avoid all difficulties, the objinfo feature can be disabled with the DISABLE_OBJINFO option when compiling fbc. This is useful when porting fbc to a new platform, when building an independent/standalone/bootstrap fbc, or when running into any libbfd related problems.