Ada_Ru форум

Обсуждение языка Ада

[ada_ru] Опять про кро сс-компилляцию

Оставить новое сообщение

Сообщения

sv_lary
[ada_ru] Опять про кро сс-компилляцию
2017-03-28 06:17:45

Здравствуйте!

Возвращаюсь к своей любимой теме :-)

Ситуация:

Есть проограмма на Ada - не важно, что в ней Есть кросс-компиллер для ARM, к примеру Исходники лежат в src, объектники в obj и исполняемый в elf

Вручную всё собирается с помощью таких команд:

arm-linux-gnueabihf-gcc-5 -c ./src/hello.adb -o ./bin/hello.o

arm-linux-gnueabihf-gnatbind ./bin/hello.ali

arm-linux-gnueabihf-gnatlink ./bin/hello.ali -o ./elf/hello

Однако это как-то скучно будет для большого проекта. Написал крохотный файл проекта:

project Ada_First is

for Target use "arm-linux-gnueabihf";

for Languages use ("Ada");

for Source_Dirs use ("src");

for Object_Dir use "./bin";

for Exec_Dir use "elf";

for Main use ("main.adb");

end Ada_First;

Однако, gnatmake никак не реагирует на строку

for Target use "arm-linux-gnueabihf";

Просто создаёт ELF для х86_64. Если же задаю этот параметр в командной строке:

gnatmake --target=arm-linux-gnueabihf -P ada_first.gpr

говорит, что нелегальный ключ.

Хорошо, тогда попытался использовать gprbuild. Сначала, с помощью gprconfig создал файд cgpr.

Утилиту gprconfig вызывал с ключом --target=arm-linux-gnueabihf и хотя утилита, вроде-бы находила кросс-тулзы, но в файле cgrp не было ни малейшего упоминания о языке Ada, только - C. Я руками дописал строки, которые мне показались разумными. В результате получилось вот что:

-- This gpr configuration file was generated by gprconfig

-- using this command line:

-- gprconfig --target=arm-linux-gnueabihf --config=Ada

configuration project Default is

for Target use "arm-linux-gnueabihf";

for Archive_Builder use ("ar", "cr");

for Archive_Builder_Append_Option use ("q");

for Archive_Indexer use ("ranlib");

for Archive_Suffix use ".a";

for Library_Builder use "/usr/lib/gprbuild/gprlib";

for Library_Support use "full";

-- for Shared_Library_Prefix use "/usr/arm-linux-gnueabihf/sysroot/usr/lib";

for Shared_Library_Prefix use "lib";

for Symbolic_Link_Supported use "true";

for Library_Major_Minor_Id_Supported use "true";

for Shared_Library_Minimum_Switches use ("-shared");

for Library_Version_Switches use ("-Wl,-soname,");

for Shared_Library_Suffix use ".so";

for Library_Auto_Init_Supported use "true";

for Run_Path_Option use ("-Wl,-z,origin,-rpath,");

for Run_Path_Origin use "$ORIGIN";

for Library_Encapsulated_Options use ("-shared", "-static-libgcc"); for Library_Partial_Linker use ("arm-linux-gnueabi-gcc", "-nostdlib", "-Wl,-r", "-o");

for Default_Language use "C";

package Builder is

for Executable_Suffix use "";

end Builder;

package Compiler is

for Driver ("C") use "/usr/bin/arm-linux-gnueabi-gcc"; for Leading_Required_Switches ("C") use

("-c", "-x", "c") & Compiler'Leading_Required_Switches ("C"); for Driver ("Ada") use "/usr/bin/arm-linux-gnueabi-gcc"; for Leading_Required_Switches ("Ada") use

("-c") & Compiler'Leading_Required_Switches ("Ada");

for Include_Path ("C") use "CPATH";

for Include_Path ("Ada") use "ADAPATH";

for Dependency_Switches ("C") use ("-MMD", "-MF", "");

for PIC_Option ("C") use ("-fPIC");

end Compiler;

package Naming is

for Spec_Suffix ("C") use ".h";

for Body_Suffix ("C") use ".c";

for Spec_Suffix ("Ada") use ".ads";

for Body_Suffix ("Ada") use ".adb";

end Naming;

package Linker is

for Map_File_Option use "-Wl,-Map,";

for Driver use Compiler'Driver ("C");

end Linker;

package Clean is

-- Remove the files generated by gnatinspect (in the context of GPS) for Artifacts_In_Object_Dir use Clean'Artifacts_In_Object_Dir & ("gnatinspect.*");

for Source_Artifact_Extensions ("C") use (".gli");

for Object_Artifact_Extensions ("C") use (".s", "ci", ".gcno"); end Clean;

end Default;

Теперь, если запустить так:

gprbuild -P ada_first.gpr

то запускается кросс-компилляция. И успешно проходит - создаются файлы *.ali и *.o.

А вот линковка падает: не находит библиотек:

function `_start':

(.text+0x28): undefined reference to `main'

main.o: In function `_ada_main':

main.adb:(.text+0x1e): undefined reference to `ada__assertions__assert__2' libada_first.a(hello.o): In function `_ada_hello':

hello.adb:(.text+0x18): undefined reference to `ada__text_io__put_line__2' hello.adb:(.text+0x30): undefined reference to `ada__text_io__put_line__2' collect2: error: ld returned 1 exit status

gprbuild: link of main.adb failed

Я понимаю, что где-то надо задать расположение ARM-овских библиотек, они у меня есть.

Но вот - где и как ?

On 03/28/2017 09:17 AM, sv_lary@fromru.com [ada_ru] wrote:

 

Однако, gnatmake никак не реагирует на строку

 

for Target use "arm-linux-gnueabihf";

 

По секрету: gnatmake вообще не понимает файлы проектов. Забудьте о нём.

Хорошо, тогда попытался использовать gprbuild. Сначала, с помощью gprconfig создал файд cgpr.

Утилиту gprconfig вызывал с ключом --target=arm-linux-gnueabihf и хотя утилита, вроде-бы находила кросс-тулзы, но в файле cgrp не было ни малейшего упоминания о языке Ada, только - C.

Вот это правильный путь. Только имеет смысл добавлять -v и анализировать вывод, что бы подправить базу данных gprbuild или системные пакеты что бы Ada находилась самостоятельно.

 

Я понимаю, что где-то надо задать расположение ARM-овских библиотек, они у меня есть.

Тогда разбираться почему же gprconfig не находит компилятор Ada. Раскрою ещё один секрет - он наверное как раз и не находит эти библиотеки.

Втр 28 Мар 2017 09:17:49 +0300, sv_lary@fromru.com [ada_ru] <ada_ru@yahoogroups.com> написал:

Здравствуйте!

Возвращаюсь к своей любимой теме :-)

Попробуйте допилить БД gprbuild-а. Это должно быть не сложно. Запускайте gprconfig --target=arm-linux-gnueabihf --config=ada,, -v

и "-v -v" и смотрите, что не находит. Скорее всего просто версия компилятора ему не нравиться.

Может быть полезно посмотреть на это

https://github.com/AdaCore/gprbuild/issues/5#issuecomment-223049206

Если делать руками cgpr, вот что мне выдает gprconfig для GNAT GPL 2016 ARM

-- This gpr configuration file was generated by gprconfig

-- using this command line:

-- gprconfig --batch -o /tmp/aaa/bin/GNAT-TEMP-000001.TMP --target=arm-eabi --config=ada,,

-- from /tmp/aaa

configuration project Default is

for Target use "arm-eabi";

for Toolchain_Version ("Ada") use "GNAT 2016";

for Runtime_Library_Dir ("Ada") use "/home/max/net/gnat-arm/arm-eabi/lib/gnat/ravenscar-sfp-sam4sxplainedpro//adalib/";

for Runtime_Source_Dirs ("Ada") use ("/home/max/net/gnat-arm/arm-eabi/lib/gnat/ravenscar-sfp-sam4sxplainedpro//adainclude/");

for Archive_Builder use ("arm-eabi-ar", "cr");

for Archive_Builder_Append_Option use ("q");

for Archive_Indexer use ("arm-eabi-ranlib");

for Archive_Suffix use ".a";

for Library_Support use "static_only";

for Library_Builder use "/home/max/net/gnat-arm/libexec/gprbuild/gprlib"; for Default_Language use "Ada";

type Loaders is ("ROM", "SAMBA", "USER");

Loader : Loaders := external ("LOADER", "ROM");

package Builder is

for Executable_Suffix use "";

end Builder;

package Compiler is

for Driver ("Ada") use "/home/max/net/gnat-arm/bin/arm-eabi-gcc";

for Language_Kind ("Ada") use "unit_based";

for Dependency_Kind ("Ada") use "ALI_File";

for Leading_Required_Switches ("Ada") use

("-c", "-x", "ada", "-gnatA")

& Compiler'Leading_Required_Switches ("Ada");

for Mapping_File_Switches ("Ada") use ("-gnatem=");

for Mapping_Spec_Suffix ("Ada") use "%s";

for Mapping_Body_Suffix ("Ada") use "%b";

for Config_File_Switches ("Ada") use ("-gnatec=");

for Include_Path_File ("Ada") use "ADA_PRJ_INCLUDE_FILE"; for Multi_Unit_Switches ("Ada") use ("-gnateI");

for Multi_Unit_Object_Separator ("Ada") use "~";

for Config_Body_File_Name ("Ada") use

"pragma Source_File_Name_Project (%u, Body_File_Name => ""%f"");"; for Config_Spec_File_Name ("Ada") use

"pragma Source_File_Name_Project (%u, Spec_File_Name => ""%f"");"; for Config_Body_File_Name_Index ("Ada") use

"pragma Source_File_Name_Project (%u, Body_File_Name => ""%f"", Index => %i);";

for Config_Spec_File_Name_Index ("Ada") use

"pragma Source_File_Name_Project (%u, Spec_File_Name => ""%f"", Index => %i);";

for Config_Body_File_Name_Pattern ("Ada") use

"pragma Source_File_Name_Project " &

" (Body_File_Name => ""*%b""," &

" Casing => %c," &

" Dot_Replacement => ""%d"");";

for Config_Spec_File_Name_Pattern ("Ada") use

"pragma Source_File_Name_Project " &

" (Spec_File_Name => ""*%s""," &

" Casing => %c," &

" Dot_Replacement => ""%d"");";

for Config_File_Unique ("Ada") use "False";

for PIC_Option ("Ada") use ("-fPIC");

for Leading_Required_Switches ("Ada") use

Compiler'Leading_Required_Switches ("Ada") & ("--RTS=/home/max/net/gnat-arm/arm-eabi/lib/gnat/ravenscar-sfp-sam4sxplainedpro/");

Common_Required_Switches := ("-mlittle-endian", "-mhard-float", "-mcpu=cortex-m4", "-mfpu=fpv4-sp-d16", "-mthumb");

for Leading_Required_Switches ("Ada") use

Compiler'Leading_Required_Switches ("Ada") &

Common_Required_Switches;

for Leading_Required_Switches ("C") use

Compiler'Leading_Required_Switches ("C") &

Common_Required_Switches;

end Compiler;

package Naming is

for Spec_Suffix ("Ada") use ".ads";

for Body_Suffix ("Ada") use ".adb";

for Casing use "lowercase";

for Dot_Replacement use "-";

end Naming;

package Binder is

for Required_Switches ("Ada") use

Binder'Required_Switches ("Ada") &

("gnatbind_prefix=arm-eabi-");

for Objects_Path_File ("Ada") use "ADA_PRJ_OBJECTS_FILE"; for Driver ("Ada") use

"/home/max/net/gnat-arm/libexec/gprbuild/gprbind";

for Required_Switches ("Ada") use

Binder'Required_Switches ("Ada") & ("--RTS=/home/max/net/gnat-arm/arm-eabi/lib/gnat/ravenscar-sfp-sam4sxplainedpro/");

end Binder;

package Linker is

for Driver use Compiler'Driver ("Ada");

for Map_File_Option use "-Wl,-Map,";

for Response_File_Format use "GCC_GNU";

for Max_Command_Line_Length use "8192";

for Required_Switches use Linker'Required_Switches &

("-L/home/max/net/gnat-arm/arm-eabi/lib/gnat/ravenscar-sfp-sam4sxplainedpro//adalib", "-nolibc", "-nostartfiles") &

Compiler.Common_Required_Switches;

case Loader is

when "USER" =>

when others =>

for Required_Switches use Linker'Required_Switches &

("-L", "/home/max/net/gnat-arm/arm-eabi/lib/gnat/ravenscar-sfp-sam4sxplainedpro//../bsps/sam4s/bsp/",

"-T", "memory-map.ld",

"-T", "common-" & Loader & ".ld");

end case;

end Linker;

package Clean is

-- Remove the files generated by gnatinspect (in the context of GPS) for Artifacts_In_Object_Dir use Clean'Artifacts_In_Object_Dir & ("gnatinspect.*");

for Source_Artifact_Extensions ("Ada")

use (".dg", ".rep", ".stdout", ".stderr");

for Object_Artifact_Extensions ("Ada") use (".s", ".ci", ".gcno"); end Clean;

end Default;

--

Здравствуйте, Вадим!

gnatmake вообще не понимает файлы проектов.

Ну почему же "вообще"?! На директивы, задающие имена каталогов и т.п. - адекватно реагирует.

> имеет смысл добавлять -v и анализировать вывод,

$ gprconfig -v --target=arm-linux-gnueabihf --config=Ada

Only compilers matching target arm-linux-gnueabihf will be preserved

Попытался проанализировать. Утилита просматривает все каталоги из переменной $PATH и ищет там компилляторы. На каком основании она выбирает компилляторы - я не знаю. Утилита нашла несколько компилляторов в папке /usr/bin и принялась проверять их по каким-то условиям. Из 7 кандидатов отобрала вот этот:

GCC is candidate: filename=arm-linux-gnueabi-gcc

target: executing "arm-linux-gnueabi-gcc -dumpmachine" output=<use -v -v> no match

target: grep matched="arm-linux-gnueabihf"

version: executing "arm-linux-gnueabi-gcc -v" output=<use -v -v> no match version: nogrep no match

version: grep matched="5.4.0"

languages: constant := C

Filter=Ada,,,,: language does not match

Adding compiler to interactive menu C,5.4.0,,/usr/bin/,GCC selected=FALSE

Причём, даже у него: "Filter=Ada,,,,: language does not match". У остальных кандидатов два варианта:

1) Ignore compiler, since couldn't guess its version

2) Target for this compiler does not match --target

В подготовленном файле *.cgpr упоминание об Ada вообще отсутствует. Наприер, в пакете имён файлов:

package Naming is

for Spec_Suffix ("C") use ".h";

for Body_Suffix ("C") use ".c";

end Naming;

И я, ручками, дописывал сюда для Ada по аналогии.

что бы подправить базу данных gprbuild или системные пакеты что

> бы Ada находилась самостоятельно.

Если можно - поподробнее! Что это за база и как её править ?

Здравствуйте, Максим!

Может быть полезно посмотреть на это

На мой взгляд, тут ситуация несколько иная. У TS не собираются ЕГО библиотеки, а у меня - не видны готовые СИСТЕМНЫЕ библиотеки. То, что эти библиотеки есть, доказывается тем фактом, что при ручной сборки, готовый ELF собирается.

Странное дело: если я запускаю конфигуратор так:

gprconfig --batch -o ~/tmp/GNAT-TEMP-000001.TMP --target=arm-linux-gnueabihf --config=Ada,,

То он выдаёт: Error: no matching compiler found for --config=Ada,,,, Причём, компиллятор arm-linux-gnueabi-gcc он проверяет дважды(?) и первый раз выдаёт

сообщение Filter=Ada,,,,: language does not match а второй раз - Ignore compiler, since couldn't guess its version

А если убираю параметр --batch , то конфигурация по умолчанию создаётся, но в ней нет упоминания про Ada.

--

gnatmake вообще не понимает файлы проектов.

Ну почему же "вообще"?!

Если в строке gnatmake присутствует -P, то просто вызывается из-под полы gprbuild и все.

Попытался проанализировать. Утилита просматривает все каталоги из переменной $PATH и ищет там компилляторы. На каком основании она выбирает компилляторы - я не знаю.

См.документацию, файл gprbuild_ug.

Если можно - поподробнее! Что это за база и как её править ?

См. там же.

Здравствуйте, Максим!

вот что мне выдает gprconfig для GNAT GPL 2016 ARM

Я взял за основу Ваш файл настроек и обработал его последовательно тремя инструментами:

рашпилем напильником надфилем

И - о чудо - сборка прошла! Насколько я понял, Вы готовите программу для встроенной системы, без линуха? Там про какое-то run-time окружение говорилось..

Осталось только разобраться, почему у меня Cnat-GPS умирает через 30 секунд работы и можно будет браться за что-то серьёзное...

Если Вам любопытно, то вот прилагаю текст файла настроек, с которым у меня пошла сборка.

Можете натравить на него diff, или meld - сразу всё станет ясно.

-- This gpr configuration file was generated by gprconfig

-- using this command line:

-- gprconfig --batch -o ~/tmp/GNAT-TEMP-000001.tmp --target=arm-linux-gnueabi --config=ada,,

-- from /tmp/aaa

configuration project Default is

for Target use "arm-linux-gnueabihf";

for Toolchain_Version ("Ada") use "GNAT 2016";

for Runtime_Library_Dir ("Ada") use "//usr/lib/gcc-cross/arm-linux-gnueabihf/5/adalib/";

-- for Runtime_Source_Dirs ("Ada") use ("/usr/lib/gcc-cross/arm-linux-gnueabihf/5/adainclude/");

for Archive_Builder use ("arm-linux-gnueabi-ar", "cr");

for Archive_Builder_Append_Option use ("q");

for Archive_Indexer use ("arm-linux-gnueabi-ranlib");

for Archive_Suffix use ".a";

for Library_Support use "static_only";

for Library_Builder use "/usr/lib/gprbuild/gprlib";

for Default_Language use "Ada";

type Loaders is ("ROM", "SAMBA", "USER");

Loader : Loaders := external ("LOADER", "ROM");

package Builder is

for Executable_Suffix use "";

end Builder;

package Compiler is

for Driver ("Ada") use "/usr/bin/arm-linux-gnueabi-gcc";

for Language_Kind ("Ada") use "unit_based";

for Dependency_Kind ("Ada") use "ALI_File";

for Leading_Required_Switches ("Ada") use ("-c", "-x", "ada", "-gnatA") & Compiler'Leading_Required_Switches ("Ada");

for Mapping_File_Switches ("Ada") use ("-gnatem=");

for Mapping_Spec_Suffix ("Ada") use "%s";

for Mapping_Body_Suffix ("Ada") use "%b";

for Config_File_Switches ("Ada") use ("-gnatec=");

for Include_Path_File ("Ada") use "ADA_PRJ_INCLUDE_FILE";

for Multi_Unit_Switches ("Ada") use ("-gnateI");

for Multi_Unit_Object_Separator ("Ada") use "~";

for Config_Body_File_Name ("Ada") use

"pragma Source_File_Name_Project (%u, Body_File_Name => ""%f"");"; for Config_Spec_File_Name ("Ada") use

"pragma Source_File_Name_Project (%u, Spec_File_Name => ""%f"");"; for Config_Body_File_Name_Index ("Ada") use

"pragma Source_File_Name_Project (%u, Body_File_Name => ""%f"", Index => %i);";

for Config_Spec_File_Name_Index ("Ada") use

"pragma Source_File_Name_Project (%u, Spec_File_Name => ""%f"", Index => %i);";

for Config_Body_File_Name_Pattern ("Ada") use

"pragma Source_File_Name_Project " &

" (Body_File_Name => ""*%b""," &

" Casing => %c," &

" Dot_Replacement => ""%d"");";

for Config_Spec_File_Name_Pattern ("Ada") use

"pragma Source_File_Name_Project " &

" (Spec_File_Name => ""*%s""," &

" Casing => %c," &

" Dot_Replacement => ""%d"");";

for Config_File_Unique ("Ada") use "False";

for PIC_Option ("Ada") use ("-fPIC");

-- for Leading_Required_Switches ("Ada") use

-- Compiler'Leading_Required_Switches ("Ada") & ("--RTS=/home/max/net/gnat-arm/arm-eabi/lib/gnat/ravenscar-sfp-sam4sxplainedpro/");

-- Common_Required_Switches := ("-mlittle-endian", "-mhard-float", --- "-mcpu=cortex-m4", "-mfpu=fpv4-sp-d16", "-mthumb");

-- for Leading_Required_Switches ("Ada") use

-- Compiler'Leading_Required_Switches ("Ada") &

-- Common_Required_Switches;

-- for Leading_Required_Switches ("C") use

-- Compiler'Leading_Required_Switches ("C") &

-- Common_Required_Switches;

end Compiler;

package Naming is

for Spec_Suffix ("Ada") use ".ads";

for Body_Suffix ("Ada") use ".adb";

for Casing use "lowercase";

for Dot_Replacement use "-";

end Naming;

package Binder is

for Required_Switches ("Ada") use

Binder'Required_Switches ("Ada") &

("gnatbind_prefix=arm-linux-gnueabihf-");

for Objects_Path_File ("Ada") use "ADA_PRJ_OBJECTS_FILE";

for Driver ("Ada") use "/usr/lib/gprbuild/gprbind";

-- for Required_Switches ("Ada") use

-- Binder'Required_Switches ("Ada") & ("--RTS=/home/max/net/gnat-arm/arm-eabi/lib/gnat/ravenscar-sfp-sam4sxplainedpro/");

end Binder;

package Linker is

for Driver use Compiler'Driver ("Ada");

for Map_File_Option use "-Wl,-Map,";

for Response_File_Format use "GCC_GNU";

for Max_Command_Line_Length use "8192";

-- for Required_Switches use Linker'Required_Switches &

-- ("-L/home/max/net/gnat-arm/arm-eabi/lib/gnat/ravenscar-sfp-sam4sxplainedpro//adalib", "-nolibc", "-nostartfiles") &

-- Compiler.Common_Required_Switches;

-- case Loader is

-- when "USER" =>

-- when others =>

-- for Required_Switches use Linker'Required_Switches &

-- ("-L", "/home/max/net/gnat-arm/arm-eabi/lib/gnat/ravenscar-sfp-sam4sxplainedpro//../bsps/sam4s/bsp/",

-- "-T", "memory-map.ld",

-- "-T", "common-" & Loader & ".ld");

-- end case;

end Linker;

package Clean is

-- Remove the files generated by gnatinspect (in the context of GPS) for Artifacts_In_Object_Dir use Clean'Artifacts_In_Object_Dir & ("gnatinspect.*");

for Source_Artifact_Extensions ("Ada")

use (".dg", ".rep", ".stdout", ".stderr");

for Object_Artifact_Extensions ("Ada") use (".s", ".ci", ".gcno"); end Clean;

end Default;

Это, конечно, хорошо, но этот сизифов труд имеет смысл только если есть желание разобраться, как работает система компиляции в GNAT.

Рекомендую таки настроить gprbuild. Повторюсь, что это не сложно.

Поддерживаю Василия в предложении почитать документацию!

Сообщение "Ignore compiler, since couldn't guess its version" похоже на то, о чем пишут в github issue, на которое я ссылался выше.

Вероятно, как только gprbuild опознает Ваш компилятор, то и системные библиотеки найдутся.

Посмотрите файл share/gprconfig/compilers.xml, а в нем

<compiler_description>

<name>GNAT</name>

<executable prefix="1">(.*-wrs-.*|.*-sysgo.*|.*-elf-.*|.*-eabi-.*....)?gnatmake</executable>

<version>

<external>${PREFIX}gnatls -v --version</external>

<grep regexp="^GNATLS.+?(\d+(\.\d+)?)" group="1"></grep>

</version>

<languages>Ada</languages>

<variable name="gcc_version">

<external>${PREFIX}gcc -v</external>

<grep regexp="^[-\w]*gcc \S+ (\S+)" group="1"></grep>

</variable>

<runtimes default="default,kernel,native">

Это инструкции для gprconfig, как найти компилятор Ады. Сравните с тем, что у Вас выдает -v -v после

GNAT is candidate:...

Добейтесь, чтобы этот "кандидат" "срабатывал" путем правки этих строк в compilers.xml.

Вероятно нужно будет сделать то, что написано в github issue. И проверьте результирующий cgpr, сверив его с уже работающим "ручным" образцом.

Чтв 30 Мар 2017 07:25:26 +0300, sv_lary@fromru.com [ada_ru] <ada_ru@yahoogroups.com> написал:

Насколько я понял, Вы готовите программу для встроенной системы, без линуха? Там про какое-то run-time окружение говорилось..

Я портирую bareboard runtime на новую платку WifiMCU.

https://github.com/reznikmm/embedded-runtimes

Сейчас работа стала, жду JTAG из Китая :) Оправдываясь скажу, что окирпичил железяку залив не Адскую прошивку, а Си-шную :)

Осталось только разобраться, почему у меня Cnat-GPS умирает через 30 секунд работы и можно будет браться за что-то серьёзное...

1) посмотрите последний log файла в $HOME/.gps/

2) убедитесь, что запускаете не gps_exe а shell файл с именем gps

--

Здравствуйте, Максим!

1) посмотрите последний log файла в $HOME/.gps/

Похоже, что какие-то проблемы с библиотекой GTK+. Если просто запустить gps, загрузив проект, но не открывая окно проекта слева - она просто ждёт и всё. Как только открываешь деревяшку проекта - начинают сыпаться сообщения вида

sys:1: Warning: Source ID 3821 was not found when attempting to remove it

Они всегда выскакивают во время движения мышкой. Если открыть на редактирование один файл исходного текста - ничего страшного не происходит. Но, если открыть ещё хотя бы один, то имена файлов на язычках закладок исчезают, курсор превращается в "часики" и через коротко время gps падает.

При этом в конце лог-файла $HOME/.gps/ вижу следующие сообщения:

[SRC_EDITOR_MODULE] 2/806 Open file /home/lary/projects/ada/ada_first/src/hello.adb Focus=TRUE (10:17:16.486)

[UNEXPECTED_EXCEPTION.EXCEPTIONS] 2/809 Unexpected exception: Exception name: CONSTRAINT_ERROR

_UNEXPECTED_EXCEPTION.EXCEPTIONS_ Message: gtkada-mdi.adb:6929 tag check failed (10:17:16.510)

[STANDARD_HOOKS] 2/810 No file editor was registered (10:17:16.510)

[UNEXPECTED_EXCEPTION.EXCEPTIONS] 4/877 Unexpected exception: Exception name: CONSTRAINT_ERROR

_UNEXPECTED_EXCEPTION.EXCEPTIONS_ Message: gtkada-mdi.adb:6929 tag check failed (10:17:40.616)

[UNEXPECTED_EXCEPTION.EXCEPTIONS] 5/878 Unexpected exception: Exception name: STORAGE_ERROR

_UNEXPECTED_EXCEPTION.EXCEPTIONS_ Message: s-intman.adb:139 explicit raise (10:17:40.631)

> 2) убедитесь, что запускаете не gps_exe а shell файл с именем gps

Странно... Мой пакетный менеджер показывает, что в состав пакета gnat-gps входят только следующие файлы:

/usr/bin/gnat-gps

/usr/share/doc/gnat-gps/changelog.Debian.gz

/usr/share/doc/gnat-gps/copyright

/usr/share/man/man1/gnat-gps.1.gz

/usr/share/menu/gnat-gps

И запускается именно gnat-gps...

On 03/31/2017 06:27 AM, sv_lary@fromru.com [ada_ru] wrote:

 

2) убедитесь, что запускаете не gps_exe а shell файл с именем gps

 

Странно... Мой пакетный менеджер показывает, что в состав пакета gnat-gps входят только следующие файлы:

 

Ну так задайте вопрос авторам этого пакета ;) А лучше - поставьте GNAT GPL и используйте проверенную версию GPS из него.

Новое сообщение:
Страницы: 1

Чтобы оставить новое сообщение необходимо Зарегистрироваться и Войти