Node: Linking a Mixed C++ & Ada Program, Next: A Simple Example, Previous: Interfacing to C++, Up: Building Mixed Ada & C++ Programs
Usually the linker of the C++ development system must be used to link mixed applications because most C++ systems will resolve elaboration issues (such as calling constructors on global class instances) transparently during the link phase. GNAT has been adapted to ease the use of a foreign linker for the last phase. Three cases can be considered:
c++
. Note that this setup is not
very common because it may request recompiling the whole GCC
tree from sources and it does not allow to upgrade easily to a new
version of one compiler for one of the two languages without taking the
risk of destabilizing the other.
$ c++ -c file1.C $ c++ -c file2.C $ gnatmake ada_unit -largs file1.o file2.o --LINK=c++
libgcc.a
,
that is to say the one that is part of the C++ compiler
installation. The implicit link command as suggested in the gnatmake
command from the former example can be replaced by an explicit link
command with full verbosity in order to verify which library is used:
$ gnatbind ada_unit $ gnatlink -v -v ada_unit file1.o file2.o --LINK=c++If there is a problem due to interfering environment variables, it can be workaround by using an intermediate script. The following example shows the proper script to use when GNAT has not been installed at its default location and g++ has been installed at its default location:
$ gnatlink -v -v ada_unit file1.o file2.o --LINK=./my_script $ cat ./my_script #!/bin/sh unset BINUTILS_ROOT unset GCC_ROOT c++ $*
$ gnatlink ada_unit file1.o file2.o --LINK=./my_script $ cat ./my_script #!/bin/sh CC $* gcc -print-libgcc-file-name
Where CC is the name of the non GNU C++ compiler.