Compiling software with different compiler than cc or clang
results in unusable output
ohartman at mail.zedat.fu-berlin.de
Sat Sep 11 14:05:47 UTC 2010
On 09/11/10 14:26, Mehmet Erol Sanliturk wrote:
> On Sat, Sep 11, 2010 at 5:43 AM, Andrew Brampton
> <brampton+freebsd at gmail.com <mailto:brampton%2Bfreebsd at gmail.com>> wrote:
> On 11 September 2010 10:28, O. Hartmann
> <ohartman at mail.zedat.fu-berlin.de
> <mailto:ohartman at mail.zedat.fu-berlin.de>> wrote:
> > Dear Sirs,
> > you see me a kind of desperate. I wrote my own a small piece of
> Â software in
> > C, calculating the orbit and position of astronomical objects,
> astroids, in
> > a heliocentric coordinate system from Keplerian orbital elements.
> So far.
> > The software calculates the set of points of an ellipse based upon
> > ephemeridal datas taken from the Minor Planet Cataloge. Again, so
> > everything all right. The set of points of an orbit is all right and
> > correct. But when it comes to positions at a specific time, then
> I loose
> > hair!
> > Compiling this piece of software with FreeBSD's gcc (V4.2) and
> clang (clang
> > devel) on my private and lab's FreeBSD boxes (both most recent
> > 8.1/amd64), this program does well, the calculated orbital
> positions are
> > very close to professional applications or observational checks.
> But when
> > compiling the sources with gcc44 or gcc45 (same source, same
> CFLAG setting,
> > mostly no CFLAGS set), then there is a great discrepancy.
> Sometimes when
> > plotting positions, the results plotted seconds before differs
> from the most
> > recent. The ellipses are allways correct, but the position of a
> single point
> > at a specific time isn't correct.
> > I use the GNU autotools to build the package.
> > I suspekt miscompilations in memory alloction or in some time- or
> > mathematical functions like sin, cos.
> > before I digg deeper I'd like to ask the community for some hints
> how to
> > hunt down such a problem.
> > regards,
> > Oliver
> Sounds a cool project. I suspect you are miss-using a feature of C or
> are using uninitialised memory, and with gcc44/45's more aggressive
> optimisations it is getting it wrong. I have three suggestions
> 1) Use valgrind to check if it finds anything wrong when running your
> program. Check both the good and the bad builds.
> 2) If your program is made up of multiple C files, then try compiling
> all of the C files with gcc42, but just one at a time with gcc44. This
> way will help you track down exactly which C file has "the bug".
> 3) Finally do some printf debugging to find the first line of code
> that is generating the wrong value.
> I hope these suggestions help.
> Another check may be to use Sun Studio C and or FortranÂ compilers .
> These can be used in Linux ( Linux version of Sun Studio )Â and/or
> OpenSolaris or Solaris ( Solaris version of SunStudio ( both in x86 ,
> x86_64 , Sparc )Â ( all of them are ( Solaris , OpenSolaris , Sun
> Studio , Linux Â ) Â free ) . All of them are freely downloadable from
> www.sun.com <http://www.sun.com> and/or www.opensolaris.com
> <http://www.opensolaris.com> ( these sites or their pages may be
> redirected to www.oracle.com <http://www.oracle.com> owned pages ) .
> Personally I tried GCC compilers , but I found that they are very
> unreliable . Now I am using Sun Studio compilers in OpenSolaris and
> Linux , and never GCC compilers .Â
> Thank you very much .
> Mehmet Erol Sanliturk
Well, the only other architectures I have access to are Linux boxes.
clang ist a very nice compiler since its syntax checking is formidable.
But its code is slow and there seems no OpenMP support at the moment.
More information about the freebsd-questions