Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[C++] zelfde gcc, zelfde cpp, andere crc

Pagina: 1
Acties:

  • liquid_ice
  • Registratie: Februari 2001
  • Laatst online: 19-11 07:22
Ik ben een overstap aan het maken van een make georienteerde build omgeving naar een scons georienteerde build omgeving.

In onze omgeving zit ook code die gecertificeerd is en met een crc-check in een unittest 'beveiligd'.

Hierdoor is het dus opgevallen dat make en scons op z'n minst een resultaat met een andere crc opleveren.
Om het 'probleem' kleiner te maken ben ik me nu eerst aan het focussen op de compile stap zelf...
(nog niet het link verhaal)

de stap van de .cpp => .o

Beide omgevingen roepen uiteindelijk dezelfde gcc-4.3.3 aan met dezelfde defines en opties.
Behalve de include paden...
Dat komt gedeeltelijk omdat we in scons een systeem hanteren die bepaalde headerfiles kenmerkt als 'intern' of 'extern' en die copierd dezelfde headerfiles naar een int of een ext directory.

Is het logisch te verwachten dat de crc's verschillend zijn als de include paden anders zijn?

Klus page: http://klusthuis.blogspot.com


  • Cilph
  • Registratie: April 2010
  • Laatst online: 19-11 10:14
GCC stopt ook nog een hoop metadata in de file, zoals, onderandere, mogelijke include paden, tijdstippen, hostnames, etc.

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 16-11 18:33
Lijkt me makkelijk te testen : in je make gebaseerde systeem verplaats je gecertificeerde code naar een ander pad en kijk of in dat geval de crc verandert.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Radiant
  • Registratie: Juli 2003
  • Niet online

Radiant

Certified MS Bob Administrator

Waarom zou je die gecertificeerde code uberhaupt opnieuw compileren en niet gewoon altijd als objectfile linken?

Je kan altijd een diff doen op de gegenereerde object files, dan weet je wat er anders is.

  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

Wat als je de objectfile stripped?

ASSUME makes an ASS out of U and ME


  • liquid_ice
  • Registratie: Februari 2001
  • Laatst online: 19-11 07:22
@H!GHGuY, helemaal correct je moet de stripped files bekijken, maar dan zat ik nog steeds met het verschil.

Just to update you guy's...

Ik heb de oorsprong van het verschil in CRC gevonden.
Het komt door een stukje smeerig gedrag van gcc4.3.3
Of op z'n minst de gcc voor ons OS...

Blijkbaar geeft gcc andere output (zelfs stripped) als je compileerd met het volle of het relatieve path.
code:
1
2
gcc C:\dirA\dirB\dirC\file.cpp
strip C:\dirA\dirB\dirC\file.o

geeft dus een ander resultaat dan:
code:
1
2
3
cd C:\dirA\dirB
gcc dirC\file.cpp
strip dirC\file.o


Kan iemand valideren of jullie ook een dergelijk verschil in CRC-check output kunnen krijgen met dit verschil?

[ Voor 8% gewijzigd door liquid_ice op 29-07-2014 13:18 ]

Klus page: http://klusthuis.blogspot.com


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 16-11 18:33
liquid_ice schreef op dinsdag 29 juli 2014 @ 12:52:
Kan iemand valideren of jullie ook een dergelijk verschil in CRC-check output kunnen krijgen met dit verschil?
Waarom zou dat relevant zijn?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 25-09-2023
In het algemeen kan je er niet vanuit gaan dat het resultaat bit-voor-bit gelijk is, zelfs wanneer de source code hetzelfde is, zoals bijvoorbeeld anderen ook al eens opgevallen is.

Een verklaring kan bijvoorbeeld zijn dat de compiler intern onafhankelijke deeltaken tegelijk uitvoert, en dat er daardoor kleine verschillen in namen van identifiers of volgorde van code kan ontstaan (die natuurlijk geen invloed hebben op de semantiek van het programma), afhankelijk hoeveel moeite men doet om dat tegen te gaan.

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


  • Nvidiot
  • Registratie: Mei 2003
  • Laatst online: 03-06 16:38

Nvidiot

notepad!

De term die je zoekt is 'deterministic build'. Deze post op stackoverflow beschrijft het working directory probleem: https://stackoverflow.com...stic-binary-output-with-g

What a caterpillar calls the end, the rest of the world calls a butterfly. (Lao-Tze)


  • liquid_ice
  • Registratie: Februari 2001
  • Laatst online: 19-11 07:22
@Infinitive & Nvidiot, bedankt daar heb ik veel aan.

Ik ga experimenteren met de PWD environment variabele.

Klus page: http://klusthuis.blogspot.com

Pagina: 1