|
From: Chris Yocum on 1 Apr 2008 09:32 Hi Everyone, I have been playing with GNAT and Ada for a little bit (GNAT 4.2.1 (Ubuntu 4.2.1-5ubuntu6) on Ubuntu 7.10). I have successfully written a doubly linked list with generics so I think I am starting to have a feel for the language. However, my binaries have always seemed a bit large compared to my C/C++ ones for similar data structures. I looked in the Wikibook FAQ about it and it instructed me to look at the various compiler options. In the course of this, I discovered GNAT's project files. I looked at few examples and wrote my own. My problem is that it always runs just the GCC without calling gnatbind or gnatlink as it does if I just call gnatlink. In any case, I figure that I could call gnatbind and gnatlink manually from there. When I do that, gnatlink fails with this error (it also happens when I use gnat gps IDE and its project files so this is happening often): ~/adastuff/testhello$ gnat make -Phello.gpr gcc-4.2 -c -O3 -gnatn -funroll-loops -fPIC -fprofile-arcs -gnat05 -I- -gnatA ~/adastuff/testhello/hello.adb ~/adastuff/testhello$ gnatbind -x hello.ali ~/adastuff/testhello$ gnatlink hello.ali b~hello.o: In function `global constructors keyed to 0_ada_main_E': b~hello.adb:(.text+0x2f2): undefined reference to `__gcov_init' b~hello.o:(.data.rel+0x48): undefined reference to `__gcov_merge_add' ../hello.o: In function `global constructors keyed to 0__ada_hello': hello.adb:(.text+0x82): undefined reference to `__gcov_init' ../hello.o:(.data.rel+0x48): undefined reference to `__gcov_merge_add' collect2: ld returned 1 exit status gnatlink: cannot call /usr/bin/gcc-4.2 Might anyone have any ideas? Have I missed something in the call to gnatlink? I can post code if that will help. Thanks in Advance!, Chris
From: Georg Bauhaus on 1 Apr 2008 10:09 Chris Yocum schrieb: > Hi Everyone, > I have been playing with GNAT and Ada for a little bit (GNAT 4.2.1 > (Ubuntu 4.2.1-5ubuntu6) on Ubuntu 7.10). I have successfully written a > doubly linked list with generics so I think I am starting to have a feel > for the language. However, my binaries have always seemed a bit large > compared to my C/C++ ones for similar data structures. I looked in the > Wikibook FAQ about it and it instructed me to look at the various > compiler options. The most important instruction should likely be to consider how many bytes are important, really. For very small Ada programs, the size of the run-time system might matter. > ~/adastuff/testhello$ gnat make -Phello.gpr > gcc-4.2 -c -O3 -gnatn -funroll-loops Loop unrolling is not necessarily reducing code size, if this is your goal? > -fPIC -fprofile-arcs Have you had a look at Chapter 9 of GCC 4.1, gcov? This chapter should also have some info about the __gcov_* messages.
From: Chris Yocum on 1 Apr 2008 10:27 Georg Bauhaus wrote: > Chris Yocum schrieb: >> Hi Everyone, >> I have been playing with GNAT and Ada for a little bit (GNAT 4.2.1 >> (Ubuntu 4.2.1-5ubuntu6) on Ubuntu 7.10). I have successfully written >> a doubly linked list with generics so I think I am starting to have a >> feel for the language. However, my binaries have always seemed a bit >> large compared to my C/C++ ones for similar data structures. I looked >> in the Wikibook FAQ about it and it instructed me to look at the >> various compiler options. > > The most important instruction should likely be to consider > how many bytes are important, really. For very small Ada > programs, the size of the run-time system might matter. I had considered this but the Wikibook says (http://en.wikibooks.org/wiki/Ada_Programming/Basic#FAQ:_Why_is_.22Hello.2C_world.21.22_so_big.3F) that this program should be on the order of 8K rather than the 21K that I am getting out of just a plain gnatmake. > > >> ~/adastuff/testhello$ gnat make -Phello.gpr >> gcc-4.2 -c -O3 -gnatn -funroll-loops > > Loop unrolling is not necessarily reducing code size, > if this is your goal? > >> -fPIC -fprofile-arcs > > Have you had a look at Chapter 9 of GCC 4.1, gcov? This > chapter should also have some info about the __gcov_* messages. Thanks for the info. I will look more closely at what you suggest. The unroll-loops was something that I copied out of Wikibook gpr file so I had not looked very closely at it. Thanks again. Chris
From: Robert A Duff on 1 Apr 2008 11:04 Chris Yocum <cyocum(a)gmail.com> writes: > Might anyone have any ideas? Have I missed something in the call to > gnatlink? I can post code if that will help. You should never have to call gnatlink or gnatbind or gcc by hand, unless you're doing something weird. Gnatmake will do it all. You should put "for Main use..." in your project file, and/or mention the name of the main file on the gnatmake command line. These things are covered in the docs. - Bob
From: Chris Yocum on 1 Apr 2008 11:08
Robert A Duff wrote: > Chris Yocum <cyocum(a)gmail.com> writes: > >> Might anyone have any ideas? Have I missed something in the call to >> gnatlink? I can post code if that will help. > > You should never have to call gnatlink or gnatbind or gcc by hand, > unless you're doing something weird. Gnatmake will do it all. > > You should put "for Main use..." in your project file, > and/or mention the name of the main file on the gnatmake > command line. These things are covered in the docs. > > - Bob Thanks. I had another look at the docs after going for a walk and saw that. Chris |