воскресенье, 16 апреля 2017 г.

Delphi + Linux

Один из клиентов пожаловался, что для нашей базы под Firebird нужна UDF, а её нет под линукс.
Решил взяться за это, сделал себе виртуалку, ставлю на неё последнюю KUbuntu 17.04 (наверно, все баги исправлены, все дела))))

Из коробки - подхватился роутер, получил IP
Сайты не открываются.
Ок, прописал гугловский красивый ДНС.
Яндекс открывается, Лазарус открывается, ubuntu.com - нет.

стал рыть,  - ifconfig из коробки нет.
Нашел таки что это какой-то новый механизм разрешения имён:
http://news.softpedia.com/news/ubuntu-16-10-yakkety-yak-switches-to-a-universal-local-dns-resolver-service-504770.shtml
рецепт из  https://bugs.launchpad.net/ubuntu/+source/systemd/+bug/1624320  не помог.

Решил попробовать PAServer от новой дельфи - на OpenSuse x64 42.3 - падает с Segmentation fault из под обычного юзера
из под рута - молча ничего не делает и сразу закрывается.
Так как Embarcadero задекларировали что поддерживают с Ubuntu 16.04 LTS, поставил её.
Однако тут не всё так хорошо - в отличие от Suse, она не берет адрес от роутера (настройки VirtualBox такие же как и у Suse)
Хотя прекрасно пингует и роутер и хост Win8

Оказалось, что Ubuntu не приемлет NAT (который подходит для Suse)  - только сетевой мост.

В итоге, после заведения SDK для Линукса
В процессе которого вы, наверняка, увидите не одно сообщение о дублировании имен файлов, получим такой вот
После того как я скомпилировал и запустил приложение из среды, я...
Ничего не увидел! :)
Видимо, не предусмотрели опций для ввода/вывода из под отладчика.
потому что надо было:
1) Enabling Use launcher application in the Run|Parameters
2) Установить XTerm 

(наверняка можно использовать и другой терминал, если помнять по умолчанию опцию в проекте (раздел Debugger, "Use launcher application") с "/usr/bin/xterm -e "%debuggee%" на что-то другое")

простой пример
program LinuxTest;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils, Classes;

var
  s: TStringList;
begin
  try

    { TODO -oUser -cConsole Main : Insert code here }
    s := TStringList.Create;
    try
      s.Add('Проверка!');
      s.SaveToFile('/home/user1/UTF8.txt', TEncoding.UTF8);
      s.SaveToFile('/home/user1/win1251.txt', TEncoding.GetEncoding(1251));
    finally
      s.Free;
    end;
  except

    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.
прекрасно создал файлы, который Kate - Advanced Text Editor прекрасно понял и распознал кодировку.

Кстати, а запускается программа под отладку из каталога
/home/user1/PAServer/scratch-dir/User-Ubuntu/LinuxTest
/home/user1/PAServer/ - здесь у меня распакован PAServer

А еще скоро будет семинар - 19 апреля


Комментариев нет: