Re-Link C++ applications

To use the replacement linker on C++ applications, the module that calls main() must be extracted from its library file and included in the linking script.

The following example Verilog application is written in C++ and being re-linked on Solaris. It reports an undefined symbol main in libckpt.a:

/usr/ccs/bin/ld /opt/SUNWspro/SC3.0.1/lib/crti.o /opt/SUNWspro/SC3.0.1/lib/crt1.o /opt/SUNWspro/SC3.0.1/lib/cg89/__fstd.o /opt/SUNWspro/SC3.0.1/lib/values-xt.o -Y P,lxx/lib:opt/SUNWspro/SC3.0.1/lib:/usr/ccs/lib:/usr/lib -o verilog verilog.o verilog/lib/*.o lib/libcman.a -L/usr/openwin/lib -lXt -X11 lib/libvoids.a -lm ‑lgen lxx/lib/_main.o -lC -lC_mtstubs -lsocket -lnsl -lintl -w -c -ldl /opt/SUNWspro/lib/crtn.o
  1. To determine which library contains main(), run nm for all libraries listed in the low-level linking script. For example:
    % nm lib/libvoids.a | grep main
  2. This module must be extracted using:
    % ar x lib/libvoids.a main.o
  3. The main.o object file must be included in the re-linking script to generate a checkpointable executable:
    /usr/ccs/bin/ld /opt/SUNWspro/SC3.0.1/lib/crti.o /opt/SUNWspro/SC3.0.1/lib/crt1.o /opt/SUNWspro/SC3.0.1/lib/cg89/__fstd.o /opt/SUNWspro/SC3.0.1/lib/values-xt.o -Y P,lxx/lib:opt/SUNWspro/SC3.0.1/lib:/usr/ccs/lib:/usr/lib -o verilog main.o verilog.o verilog/lib/*.o lib/libcman.a -L/usr/openwin/lib -lXt -X11 lib/libvoids.a -lm ‑lgen lxx/lib/_main.o -lC -lC_mtstubs -lsocket -lnsl -lintl -w -c -ldl /opt/SUNWspro/lib/crtn.o