‎03-19-2008 03:09 PM
Thanks for the replies!
I am using LV 7.1 for this particular problem and we are migrating to LV 8.2.1
I read on some other boards that some Microsoft builds (win apps) compile slightly different because of an embedded time stamp. I can't verify that is true because my 17+ years experience is with embedded apps using C code, so I really can't say.
In my experience all the builds I used to do in C code could recreate the EXE (bin) file every time without fail. If you got a wrong CRC or checksum, then it is a positive flag that your code, build process or linked libraries have changed and thus your build (application) cannot be trusted to be identical.
I have seen in a very few isolated cases (in 17+ years) a situation where the checksum is off by just a couple bytes (due to internal version # being updated by mistake for example). Our work around in that case was to diff the binary and this simple difference in the data section is very identifiable and thus can be validated by analysis and high confidence that it would not adversely effect the application function in any way. Thus, all would not have to be retested and development could proceed.
However, when I do a diff on the two LabVIEW binaries that were compiled within minutes of each other, they are radically different. I diff'd them with Beyond Compare and the maker pane on the left showing differences looked like a 2 foot long bar code (every bar in this bar code analogy marks a difference between the two files), yet the OS reports the exact same total bytes in both files. I am guessing because G language is not top down like C code, when it is compiling a diagram that has multiple paths in parallel, I guess the compiler randomly picks which it is going to do first, thus creating the same amount of binary, just in different order each time.
An interesting test would be to create an application that uses strict data flow with no parallel paths and see if it reproduces the checksum each time it is built. Then create an application that has many while loops, each with multiple paths in parallel within each loop and see if this produces different checksums with each build. This would validate that theory.
I have been to all the basic and intermediate classes and I thought I was taught that when a LV app is running it would determine at run time which parallel path is the best to run first but now I am wondering if it is really dependent on what flavor of the minute is compiled....
Thanks!!
‎03-19-2008 03:36 PM
This is a result of the file format. Some parts of the files actually contain copies of the structures that are used to keep track of the files in memory. These structures contain memory pointers that tell LabVIEW where the different parts of the file are saved. Because these pointers are different each time you run LabVIEW and they are written into the executable file, the resulting executable is different each time it is built.
‎03-19-2008 06:59 PM
‎03-20-2008 03:41 PM