W
#include <iostream>abc.cxx:
void foo(char * str){
std::cout << *str << std::endl;
}
#include <abc.hxx>main.adb:
with abc_hxx;Генерим спеки:
with Interfaces.C.Strings; use Interfaces.C.Strings;
procedure Main is
str : constant chars_ptr := New_String("X");
begin
abc_hxx.foo(str);
end Main;
gcc -c -fdump-ada-spec abc.hxxКомпилируем приложение на Аде, юзающее плюсы:
gnatmake -c main.adbБиндим сгенеренные спеки, указывая "-n", обозначая, что это НЕ main:
gnatbind -n abc_hxx.aliБиндим main:
gnatbind main.aliСобираем либу на плюсах:
g++ abc.cxx -o abc.o -c -fPICЛинкуемся:
ar rcs libabc.a abc.o
gnatlink main.ali -o result -labc -L. -lstdc++Запускаем:
./result
X
Работает!!!Естественно, вместо одного abc.cxx может быть всё что угодно.