Ада сборник пропавших без вести подразделений - PullRequest
2 голосов
/ 18 июля 2011

Я недавно обновился до новой версии компилятора GNAT .. Я пытаюсь скомпилировать исходный код GNADE (http://gnade.sourceforge.net/)

Есть ли какой-нибудь флаг, который мне нужно установить, или какой-то способ отладки этого?

Я вижу эту ошибку (когда она использовалась для компиляции в GNATPro 6.22):

gnatmake -g -O0 -fstack-check -pipe -gnatE -gnatU -gnatwl -gnatf   -gnatE -gnat05   -p  -PLibBuildGNADE.gpr
gcc -c -fPIC -g -O0 -fstack-check -pipe -gnatE -gnatU -gnatwl -gnatf -gnatE -gnat05 -I- -gnatA /home/user1/GNADE/src/gnu-db-sqlcli-generic_attr-boolean_attribute.adb
cannot generate code for file gnu-db-sqlcli-generic_attr-boolean_attribute.adb (missing subunits)

Вот источник спецификации (gnu-db-sqlcli-generic_attr-boolean_attribute.ads)

-------------------------------------------------------------------------------
--                                                                           --
--                      GNADE  : GNu Ada Database Environment                --
--                                                                           --
--  Author          : Juergen Pfeifer <juergen.pfeifer@gmx.net>
--
--  Copyright (C) 2000-2001 Juergen Pfeifer
--                                                                           --
--  GNADE is free software;  you can redistribute it  and/or modify it under --
--  terms of the  GNU General Public License as published  by the Free Soft- --
--  ware  Foundation;  either version 2,  or (at your option) any later ver- --
--  sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
--  OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
--  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
--  for  more details.  You should have  received  a copy of the GNU General --
--  Public License  distributed with GNAT;  see file COPYING.  If not, write --
--  to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
--  MA 02111-1307, USA.                                                      --
--                                                                           --
--  As a special exception,  if other files  instantiate  generics from this --
--  unit, or you link  this unit with other files  to produce an executable, --
--  this  unit  does not  by itself cause  the resulting  executable  to  be --
--  covered  by the  GNU  General  Public  License.  This exception does not --
--  however invalidate  any other reasons why  the executable file  might be --
--  covered by the  GNU Public License.                                      --
--                                                                           --
--  GNADE is implemented to work with GNAT, the GNU Ada compiler.            --
--                                                                           --
-------------------------------------------------------------------------------
generic
   type Bool_Type is mod <>;
package GNU.DB.SQLCLI.Generic_Attr.Boolean_Attribute is

   type Attribute_Value_Pair_Boolean_Scalar is new Attribute_Value_Pair
     with
      record
         Value : Boolean;
      end record;
   function To_String (Object : Attribute_Value_Pair_Boolean_Scalar)
                      return String;

   function GetAttr (Handle    : Context;
                     Attribute : T;
                     Data      : Aux;
                     MaxLength : SQLSMALLINT := 0;
                     ErrorCode : access SQLRETURN)
                    return Attribute_Value_Pair_Boolean_Scalar;

   procedure SetAttr (Handle    : in  Context;
                      AV_Pair   : in  Attribute_Value_Pair_Boolean_Scalar;
                      Data      : in  Aux;
                      ErrorCode : out SQLRETURN);

private
   Default_Len : constant Base := Base (Length_Indicator (Bool_Type'Size));

end GNU.DB.SQLCLI.Generic_Attr.Boolean_Attribute;

Вот источник тела (gnu-db-sqlcli-generic_attr-boolean_attribute.adb)

-------------------------------------------------------------------------------
--                                                                           --
--                      GNADE  : GNu Ada Database Environment                --
--                                                                           --
--  Author          : Juergen Pfeifer <juergen.pfeifer@gmx.net>
--
--  Copyright (C) 2000-2003 Juergen Pfeifer
--                                                                           --
--  GNADE is free software;  you can redistribute it  and/or modify it under --
--  terms of the  GNU General Public License as published  by the Free Soft- --
--  ware  Foundation;  either version 2,  or (at your option) any later ver- --
--  sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
--  OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
--  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
--  for  more details.  You should have  received  a copy of the GNU General --
--  Public License  distributed with GNAT;  see file COPYING.  If not, write --
--  to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
--  MA 02111-1307, USA.                                                      --
--                                                                           --
--  As a special exception,  if other files  instantiate  generics from this --
--  unit, or you link  this unit with other files  to produce an executable, --
--  this  unit  does not  by itself cause  the resulting  executable  to  be --
--  covered  by the  GNU  General  Public  License.  This exception does not --
--  however invalidate  any other reasons why  the executable file  might be --
--  covered by the  GNU Public License.                                      --
--                                                                           --
--  GNADE is implemented to work with GNAT, the GNU Ada compiler.            --
--                                                                           --
-------------------------------------------------------------------------------
with Ada.Unchecked_Conversion;
with System.Address_To_Access_Conversions;

package body GNU.DB.SQLCLI.Generic_Attr.Boolean_Attribute is

   function To_String (Object : Attribute_Value_Pair_Boolean_Scalar)
                      return String is
   begin
      return Boolean'Image (Object.Value);
   end To_String;

   function GetAttr (Handle    : Context;
                     Attribute : T;
                     Data      : Aux;
                     MaxLength : SQLSMALLINT := 0;
                     ErrorCode : access SQLRETURN)
                    return Attribute_Value_Pair_Boolean_Scalar
   is
      pragma Unreferenced (MaxLength);
      package P is new System.Address_To_Access_Conversions (Bool_Type);

      Value : aliased Bool_Type;
      Len   : Base := Default_Len;
      Res   : Boolean := False;
   begin
      Get (Handle,
           Attribute,
           To_SQLPOINTER (P.To_Address
                          (P.Object_Pointer'(Value'Access))),
           Len,
           Data,
           ErrorCode);
      if Value /= 0 then
         Res := True;
      end if;
      return Attribute_Value_Pair_Boolean_Scalar'
        (Attribute => Attribute,
         Value     => Res);
   end GetAttr;

   procedure SetAttr (Handle    : in Context;
                      AV_Pair   : in Attribute_Value_Pair_Boolean_Scalar;
                      Data      : in Aux;
                      ErrorCode : out SQLRETURN)
   is
      function Cvt is new Ada.Unchecked_Conversion (SQLINTEGER, SQLPOINTER);
      Len : constant Base     := Default_Len;
      Val : aliased Bool_Type := 0;
   begin
      if AV_Pair.Value then
         Val := 1;
      end if;
      Set (Handle, AV_Pair.Attribute,
           Cvt (SQLINTEGER (Val)),
           Len,
           Data,
           ErrorCode);
   end SetAttr;


end GNU.DB.SQLCLI.Generic_Attr.Boolean_Attribute;

Ответы [ 2 ]

1 голос
/ 18 июля 2011

Флаг -x, который вы упомянули в своем ответе, описан так:

Указывает, что источники, которые не являются частью какого-либо файла проекта, могут быть скомпилированы.Обычно при использовании файлов проекта компилируются только те источники, которые являются частью файла проекта.Когда этот параметр используется, источник за пределами всех файлов проекта может быть скомпилирован.Файл ALI и объектный файл будут помещены в каталог объектов основного проекта.Используемые параметры компиляции будут только те, которые указаны в командной строке.Даже когда используется ключ -x, сетевые параметры, указанные в командной строке, должны быть источниками файла проекта.

Таким образом, похоже, что вы использовали файлы проекта и имелинекоторые юниты, которые вы использовали, которые вы не потрудились поместить в любой из ваших файлов проекта.Я предполагаю, что все в GNU.DB?

Я полагаю, что решение было бы либо пойти дальше и поместить эти дополнительные источники в файл проекта, либо продолжить сборку с этим флагом -x.

1 голос
/ 18 июля 2011

По какой-то причине я передал компилятору флаг '-x', и это, похоже, решило проблему.

...