Skip to content
  • Brad King's avatar
    AIX: Explicitly compute executable exports for both XL and GNU · 9f5c2040
    Brad King authored
    On AIX, symbols in executables must be exported in order to be visible
    to modules (plugins) they load via `dlopen`.  Prior to policy `CMP0065`,
    CMake linked all executables with flags to export symbols, but the NEW
    behavior for that policy is to do so only for executables that have the
    `ENABLE_EXPORTS` target property set.  In both cases, CMake has always
    used the AIX linker option `-bexpall` option to export symbols from
    executables.
    
    This has worked fairly well with the XL compiler, but with the GNU
    compiler it works only for C ABI symbols.  The reason is that `-bexpall`
    does not export symbols starting in `_` but the GNU C++ ABI mangles all
    symbols with a leading `_`.  Therefore we have only supported C ABI
    plugins with the GNU compiler on AIX.  Some projects have tried to work
    around this by replacing `-bexpall` with `-bexpfull`, but the latter
    often exports symbols that we do not want exported.
    
    Avoid using `-bexpall` for executables by instead using by our own
    internal `ExportImportList` script to compute symbol export lists from
    the object files to be linked into an executable.  Pass the explicitly
    computed export list to the AIX linker's `-bE:...` option.  We already
    do this for shared object exports.
    
    Issue: #19163
    9f5c2040