Size: a a a

2020 October 09

W

Wild_Wind in Ada
Но если кому надо, то вот:
источник

W

Wild_Wind in Ada
abc.hxx:
#include <iostream>
void foo(char * str){
std::cout << *str << std::endl;
}

abc.cxx:
#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 может быть всё что угодно.
источник

FO

FORTRAN ONE LOVE in Ada
Можно так пуллы создавать
Анонимный опрос
43%
Удалить бота
14%
Удалить Фортрана
43%
Удалить Снежану
Проголосовало: 7
источник

AV

Alexey Veselovsky in Ada
Дык да. Я потому и затеял эти разборки с ботом, что теперь голосовалки есть сразу через телегу
источник

W

Wild_Wind in Ada
Мдя. Смог почти всё, кроме конвертирования Interfaces.C.unsigned to Interfaces.C.size_t.
источник

W

Wild_Wind in Ada
Чувствую себя придурком. Не могу одно unsigned число перевести в другое...
источник

FO

FORTRAN ONE LOVE in Ada
Alexey Veselovsky
Дык да. Я потому и затеял эти разборки с ботом, что теперь голосовалки есть сразу через телегу
а почему бот ещё с нами?
источник

OV

Oleg Volkov in Ada
Бот с вами :-)
источник

W

Wild_Wind in Ada
Wild_Wind
Чувствую себя придурком. Не могу одно unsigned число перевести в другое...
А я и есть идиот.
size : Interfaces.C.unsigned;

Всё просто - Interfaces.C.size_t(size);
источник

AV

Alexey Veselovsky in Ada
🙂
источник

W

Wild_Wind in Ada
И ловим сегфолт :)
источник

W

Wild_Wind in Ada
gdb говорит:
Program received signal SIGSEGV, Segmentation fault.
system.secondary_stack.ss_mark () at s-secsta.adb:912
912  s-secsta.adb: Нет такого файла или каталога.
источник

W

Wild_Wind in Ada
Ладно, пойду спать. Завтра до конца разберусь.
источник

W

Wild_Wind in Ada
Но по крайне мере, компилируется и линкуется оно без ошибок :D
источник

W

Wild_Wind in Ada
Wild_Wind
Но по крайне мере, компилируется и линкуется оно без ошибок :D
Неа, с кучей:

ld: ./libadalib.a(adalib.o): в функции «adalib__write_to_file___finalizer.0»:
adalib.adb:(.text+0x13): неопределённая ссылка на «system__secondary_stack__ss_release»
ld: ./libadalib.a(adalib.o): в функции «adalib::write_to_file(char const*, char const*, unsigned int)»:
adalib.adb:(.text+0x61): неопределённая ссылка на «system__secondary_stack__ss_mark»
ld: adalib.adb:(.text+0x7b): неопределённая ссылка на «ada__text_io__file_typeDefault_Initial_Condition»
ld: adalib.adb:(.text+0x8a): неопределённая ссылка на «interfaces__c__strings__value__3»
ld: adalib.adb:(.text+0x174): неопределённая ссылка на «__gnat_rcheck_CE_Range_Check»
d: adalib.adb:(.text+0x197): неопределённая ссылка на «interfaces__c__strings__value__4»
ld: adalib.adb:(.text+0x27d): неопределённая ссылка на «__gnat_rcheck_CE_Range_Check»
ld: adalib.adb:(.text+0x2ef): неопределённая ссылка на «ada__text_io__create»
ld: adalib.adb:(.text+0x33d): неопределённая ссылка на «ada__text_io__put__3»
ld: adalib.adb:(.text+0x34c): неопределённая ссылка на «ada__text_io__close»
ld: ./libadalib.a(adalib.o):(.data.rel.local.DW.ref.__gnat_personality_v0[DW.ref.__gnat_personality_v0]+0x0): неопределённая ссылка на «__gnat_personality_v0»
источник

W

Wild_Wind in Ada
Интересно, что именно я забыл прилинковать?
источник

FO

FORTRAN ONE LOVE in Ada
выглядит, как будто забыт быть прилинкованным C.Strings
источник

W

Wild_Wind in Ada
FORTRAN ONE LOVE
выглядит, как будто забыт быть прилинкованным C.Strings
Ага, и с частью стандартной либы.
Если же всё-таки умудряюсь слинковать, то падает с сегфолтом https://t.me/adalang/83803.
источник

FO

FORTRAN ONE LOVE in Ada
:(
источник

W

Wild_Wind in Ada
Если стектрейс чем-то поможет, то вот:
источник