On modern UNIX systems shared objects are used and loading is done using dlopen(). The argument of load/1 must be a shared object (.so file).
On Windows systems dynamic libraries are used. The argument of load/1 must be a .dll file.
To write portable programs, it is possible to query the value of the flag object_suffix. It gives the correct file extensions for the loadable objects on the current platform (e.g. "so", "dll").
Success:
   % See the msg.c example source in external/2.
    % eclipse
   % load the .o file dynamically into the system
    [eclipse]: load('msg.so').
    yes.
    [eclipse]: get_flag(prmsg/1,visibility,Vis).
    accessing an undefined procedure
   % link the object file with a predicate definition.
    [eclipse]: external(prmsg/1,"p_prmsg").
    yes.
   % check on existence and flags of prmsg/1.
    [eclipse]: get_flag(prmsg/1,type,V),
               get_flag(prmsg/1,tool,T),
               get_flag(prmsg/1,visibility,Vis).
    V = user
    T = off
    Vis = local     More? (;)
    yes.
Error:
    [eclipse]: load('msg.c').
    system interface error: Unknown system error
              % not loading an object file.
    [eclipse]: load('msg.o').
    system interface error: No such file or directory
              % no compilation of msg.c to give msg.o
    load(F).                     (Error 4).
    load(msg(o)).                (Error 5).