• 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
    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
Last commit
Last update
subproject Loading commit data...
BuildTargetInSubProject.cmake Loading commit data...
CMakeLists.txt Loading commit data...
NEWBad.cmake Loading commit data...
NEWGood.cmake Loading commit data...
OLDBad1.cmake Loading commit data...
OLDBad2.cmake Loading commit data...
RunCMakeTest.cmake Loading commit data...
WARN-OFF.cmake Loading commit data...
WARN-ON-stderr.txt Loading commit data...
WARN-ON.cmake Loading commit data...