Question

I have a need to see whether or not it is possible to make boost 1.50 binary reproducible with as little change to the source code as possible for the sake of source integrity. The challenge is to do it without changing any .cpp or .hpp file.

Simply compiling it twice and doing a diff shows failure due to the __TIME__ and __DATE__ macros that appear in boost libraries WAVE and SPIRIT.

I am compiling using g++ 4.1.1. Anyone know of a way to tell the preprocessor to undefine or redefine those macros via some kind of environment variable? If not an env var, then some g++ command line option? I imagine it's possible that I could edit some .jam file to redefine __TIME__ and __DATE__, macro to ???? or whatever gcc says the default is when those cannot be resolved.

Perhaps there exists a way to force the preprocessor not be able to resolve the current date and time, which I could enable, build, then disable?

Any ideas regarding this would be most appreciated. Thank you.

Edit: To those who've been following this, I think I made a grave mistake in my original question. I've found now that simple back to back builds with the same exact bjam build command produce .a and .so files that are drastically different beyond just DATE and TIME macros. Binary hex diffs show large chunks of differences in the .so files. The .a files seem to follow a pattern of the same value being consistently different (and this could very well be TIME and DATE macro values) but the .so files are not even in the same ballpark. If anyone is in the mood, I challenge you to build boost 1.50 twice, comparing the build output and try to witness that there are not significant differences beyond simply the informatical difference that a change in date/time of the build would constitute.

Edit (The sequel!): After doing a lot more digging, I've uncovered what appears to be some sort of inconsistent name mangling. Building only boost filesystem, twice, back to back, and inspecting differences between the file path.o between the two, I've noticed this:

nm of first path.o: 00000000 b _ZN57_GLOBAL__N_libs_filesystem_src_path.cpp_00000000_8F1C916311path_localeE 0000000c b _ZN57_GLOBAL__N_libs_filesystem_src_path.cpp_00000000_8F1C916312dot_dot_pathE 00000000 r _ZN57_GLOBAL__N_libs_filesystem_src_path.cpp_00000000_8F1C916316separator_stringE 00000004 b _ZN57_GLOBAL__N_libs_filesystem_src_path.cpp_00000000_8F1C916317codecvt_facet_ptrE 00000004 r _ZN57_GLOBAL__N_libs_filesystem_src_path.cpp_00000000_8F1C916326preferred_separator_stringE 00000008 b _ZN57_GLOBAL__N_libs_filesystem_src_path.cpp_00000000_8F1C91638dot_pathE

nm of second path.o: 00000000 b _ZN57_GLOBAL__N_libs_filesystem_src_path.cpp_00000000_EDDD474511path_localeE 0000000c b _ZN57_GLOBAL__N_libs_filesystem_src_path.cpp_00000000_EDDD474512dot_dot_pathE 00000000 r _ZN57_GLOBAL__N_libs_filesystem_src_path.cpp_00000000_EDDD474516separator_stringE 00000004 b _ZN57_GLOBAL__N_libs_filesystem_src_path.cpp_00000000_EDDD474517codecvt_facet_ptrE 00000004 r _ZN57_GLOBAL__N_libs_filesystem_src_path.cpp_00000000_EDDD474526preferred_separator_stringE 00000008 b _ZN57_GLOBAL__N_libs_filesystem_src_path.cpp_00000000_EDDD47458dot_pathE

I don't think I've seen this kind of thing before. Why would these particular local variable definitions be mangled with EDDD4745 as opposed to 8F1C9163 ? Any thoughts? My head blew up once today already (solved by a nearby jack o' lantern). This one is just vicious.

Edit: v3)

I'm still at it unfortunately. At this point I'm down in the ELF file spec level attempting to determine what's changing. I'm just working with boost filesystem at this point. My bjam command is

`./b2 -a --with-filesystem --debug-building -d+2 toolset=gcc define=__DATE__="??" define=__TIME__="??" pch=off hardcode-dll-paths=false strip=on`

Attempting to determine what in hell is causing these differences is quite a chore. readelf is helpful, but only to a point. I have here the diff of two readelf commands on two builds of boost filesystem.so which used the SAME EXACT SOURCE CODE. I'm not knowledgeable enough about this stuff yet to quite determine what affects these changes, perhaps someone out in the world is however.

`diff x1diff x2diff 
120,123c120,123
< 00015044  0000cc01 R_386_32          00015070   _ZTIN5boost6system14er
< 0001506c  0000cc01 R_386_32          00015070   _ZTIN5boost6system14er
< 00015048  0000d701 R_386_32          00005760   _ZN5boost6system14erro
< 0001504c  0000af01 R_386_32          00005730   _ZN5boost6system14erro
---
> 00015044  0000cd01 R_386_32          00015070   _ZTIN5boost6system14er
> 0001506c  0000cd01 R_386_32          00015070   _ZTIN5boost6system14er
> 00015048  0000d801 R_386_32          00005760   _ZN5boost6system14erro
> 0001504c  0000b001 R_386_32          00005730   _ZN5boost6system14erro
128,133c128,133
< 00015058  00009801 R_386_32          00005690   _ZNK5boost6system14err
< 000150b8  00009801 R_386_32          00005690   _ZNK5boost6system14err
< 0001505c  0000bf01 R_386_32          000056b0   _ZNK5boost6system14err
< 000150bc  0000bf01 R_386_32          000056b0   _ZNK5boost6system14err
< 00015060  0000a901 R_386_32          00005710   _ZNK5boost6system14err
< 000150c0  0000a901 R_386_32          00005710   _ZNK5boost6system14err
---
> 00015058  00009901 R_386_32          00005690   _ZNK5boost6system14err
> 000150b8  00009901 R_386_32          00005690   _ZNK5boost6system14err
> 0001505c  0000c001 R_386_32          000056b0   _ZNK5boost6system14err
> 000150bc  0000c001 R_386_32          000056b0   _ZNK5boost6system14err
> 00015060  0000aa01 R_386_32          00005710   _ZNK5boost6system14err
> 000150c0  0000aa01 R_386_32          00005710   _ZNK5boost6system14err
141,142c141,142
< 00015068  0000f001 R_386_32          00012180   _ZTSN75_GLOBAL__N_libs
< 00015074  00007b01 R_386_32          00012200   _ZTSN5boost6system14er
---
> 00015068  00007701 R_386_32          00012180   _ZTSN75_GLOBAL__N_libs
> 00015074  00007c01 R_386_32          00012200   _ZTSN5boost6system14er
146,152c146,152
< 00015080  00007e01 R_386_32          00012220   _ZTSN5boost12noncopyab
< 000150a4  0000d801 R_386_32          00015064   _ZTIN75_GLOBAL__N_libs
< 000150cc  00007801 R_386_32          000150dc   _ZTIN5boost6system12sy
< 000150f0  00007801 R_386_32          000150dc   _ZTIN5boost6system12sy
< 00015300  00007806 R_386_GLOB_DAT    000150dc   _ZTIN5boost6system12sy
< 000150d0  00009701 R_386_32          0000c810   _ZN5boost6system12syst
< 000152f4  00009706 R_386_GLOB_DAT    0000c810   _ZN5boost6system12syst
---
> 00015080  00007f01 R_386_32          00012220   _ZTSN5boost12noncopyab
> 000150a4  0000ea01 R_386_32          00015064   _ZTIN75_GLOBAL__N_libs
> 000150cc  00007901 R_386_32          000150dc   _ZTIN5boost6system12sy
> 000150f0  00007901 R_386_32          000150dc   _ZTIN5boost6system12sy
> 00015300  00007906 R_386_GLOB_DAT    000150dc   _ZTIN5boost6system12sy
> 000150d0  00009801 R_386_32          0000c810   _ZN5boost6system12syst
> 000152f4  00009806 R_386_GLOB_DAT    0000c810   _ZN5boost6system12syst
154c154
< 000150d8  0000a501 R_386_32          0000c8b0   _ZNK5boost6system12sys
---
> 000150d8  0000a601 R_386_32          0000c8b0   _ZNK5boost6system12sys
158,161c158,161
< 000150fc  0000a301 R_386_32          000150e8   _ZTIN5boost10filesyste
< 00015304  0000a306 R_386_GLOB_DAT    000150e8   _ZTIN5boost10filesyste
< 00015100  00009501 R_386_32          0000cdd0   _ZN5boost10filesystem1
< 000152e4  00009506 R_386_GLOB_DAT    0000cdd0   _ZN5boost10filesystem1
---
> 000150fc  0000a401 R_386_32          000150e8   _ZTIN5boost10filesyste
> 00015304  0000a406 R_386_GLOB_DAT    000150e8   _ZTIN5boost10filesyste
> 00015100  00009601 R_386_32          0000cdd0   _ZN5boost10filesystem1
> 000152e4  00009606 R_386_GLOB_DAT    0000cdd0   _ZN5boost10filesystem1
163,164c163,164
< 00015108  0000c701 R_386_32          0000d6d0   _ZNK5boost10filesystem
< 00015114  0000d201 R_386_32          0001512c   _ZTIN5boost6detail17sp
---
> 00015108  0000c801 R_386_32          0000d6d0   _ZNK5boost10filesystem
> 00015114  0000d301 R_386_32          0001512c   _ZTIN5boost6detail17sp
166,176c166,176
< 0001511c  0000b001 R_386_32          0000c700   _ZN5boost6detail17sp_c
< 00015120  00008b01 R_386_32          0000cb10   _ZN5boost6detail17sp_c
< 00015124  00009301 R_386_32          0000c620   _ZN5boost6detail15sp_c
< 00015154  00009301 R_386_32          0000c620   _ZN5boost6detail15sp_c
< 00015174  00009301 R_386_32          0000c620   _ZN5boost6detail15sp_c
< 00015128  0000c101 R_386_32          0000c650   _ZN5boost6detail17sp_c
< 00015130  0000cf01 R_386_32          00012680   _ZTSN5boost6detail17sp
< 00015134  0000a801 R_386_32          00015138   _ZTIN5boost6detail15sp
< 00015144  0000a801 R_386_32          00015138   _ZTIN5boost6detail15sp
< 00015184  0000a801 R_386_32          00015138   _ZTIN5boost6detail15sp
< 0001513c  0000bb01 R_386_32          000126e0   _ZTSN5boost6detail15sp
---
> 0001511c  0000b101 R_386_32          0000c700   _ZN5boost6detail17sp_c
> 00015120  00008c01 R_386_32          0000cb10   _ZN5boost6detail17sp_c
> 00015124  00009401 R_386_32          0000c620   _ZN5boost6detail15sp_c
> 00015154  00009401 R_386_32          0000c620   _ZN5boost6detail15sp_c
> 00015174  00009401 R_386_32          0000c620   _ZN5boost6detail15sp_c
> 00015128  0000c201 R_386_32          0000c650   _ZN5boost6detail17sp_c
> 00015130  0000d001 R_386_32          00012680   _ZTSN5boost6detail17sp
> 00015134  0000a901 R_386_32          00015138   _ZTIN5boost6detail15sp
> 00015144  0000a901 R_386_32          00015138   _ZTIN5boost6detail15sp
> 00015184  0000a901 R_386_32          00015138   _ZTIN5boost6detail15sp
> 0001513c  0000bc01 R_386_32          000126e0   _ZTSN5boost6detail15sp
178c178
< 0001514c  0000d501 R_386_32          0000c670   _ZN5boost6detail15sp_c
---
> 0001514c  0000d601 R_386_32          0000c670   _ZN5boost6detail15sp_c
180,189c180,189
< 00015168  0000ed01 R_386_32          0000c6e0   _ZN5boost6detail17sp_c
< 0001516c  0000c501 R_386_32          0000c730   _ZN5boost6detail17sp_c
< 00015170  00007c01 R_386_32          0000ca30   _ZN5boost6detail17sp_c
< 00015178  0000c301 R_386_32          0000c660   _ZN5boost6detail17sp_c
< 00015180  0000ae01 R_386_32          00012720   _ZTSN5boost6detail17sp
< 000151a4  0000c801 R_386_32          000151d0   _ZTIN5boost10filesyste
< 000151a8  0000d401 R_386_32          000120c0   _ZN5boost10filesystem6
< 000151ac  0000ab01 R_386_32          00012080   _ZN5boost10filesystem6
< 000151b0  0000aa01 R_386_32          00011ee0   _ZNK5boost10filesystem
< 000151b4  0000bd01 R_386_32          00012050   _ZNK5boost10filesystem
---
> 00015168  0000ee01 R_386_32          0000c6e0   _ZN5boost6detail17sp_c
> 0001516c  0000c601 R_386_32          0000c730   _ZN5boost6detail17sp_c
> 00015170  00007d01 R_386_32          0000ca30   _ZN5boost6detail17sp_c
> 00015178  0000c401 R_386_32          0000c660   _ZN5boost6detail17sp_c
> 00015180  0000af01 R_386_32          00012720   _ZTSN5boost6detail17sp
> 000151a4  0000c901 R_386_32          000151d0   _ZTIN5boost10filesyste
> 000151a8  0000d501 R_386_32          000120c0   _ZN5boost10filesystem6
> 000151ac  0000ac01 R_386_32          00012080   _ZN5boost10filesystem6
> 000151b0  0000ab01 R_386_32          00011ee0   _ZNK5boost10filesystem
> 000151b4  0000be01 R_386_32          00012050   _ZNK5boost10filesystem
192c192
< 000151c0  0000ce01 R_386_32          00012040   _ZNK5boost10filesystem
---
> 000151c0  0000cf01 R_386_32          00012040   _ZNK5boost10filesystem
194,196c194,196
< 000151c8  00008801 R_386_32          00012070   _ZNK5boost10filesystem
< 000151cc  00009601 R_386_32          00011cb0   _ZNK5boost10filesystem
< 000151d4  00008901 R_386_32          00012900   _ZTSN5boost10filesyste
---
> 000151c8  00008901 R_386_32          00012070   _ZNK5boost10filesystem
> 000151cc  00009701 R_386_32          00011cb0   _ZNK5boost10filesystem
> 000151d4  00008a01 R_386_32          00012900   _ZTSN5boost10filesyste
202c202
< 000152f0  0000a206 R_386_GLOB_DAT    00015110   _ZTVN5boost6detail17sp
---
> 000152f0  0000a306 R_386_GLOB_DAT    00015110   _ZTVN5boost6detail17sp
207c207
< 00015314  0000b506 R_386_GLOB_DAT    00015160   _ZTVN5boost6detail17sp
---
> 00015314  0000b606 R_386_GLOB_DAT    00015160   _ZTVN5boost6detail17sp
223c223
< 00015350  00007f07 R_386_JUMP_SLOT   0000e3e0   _ZNK5boost10filesystem
---
> 00015350  00008007 R_386_JUMP_SLOT   0000e3e0   _ZNK5boost10filesystem
227c227
< 00015360  0000b207 R_386_JUMP_SLOT   00009d10   _ZN5boost10filesystem6
---
> 00015360  0000b307 R_386_JUMP_SLOT   00009d10   _ZN5boost10filesystem6
230,231c230,231
< 0001536c  0000c607 R_386_JUMP_SLOT   0000f8e0   _ZNK5boost10filesystem
< 00015370  00009d07 R_386_JUMP_SLOT   0000e370   _ZN5boost10filesystem4
---
> 0001536c  0000c707 R_386_JUMP_SLOT   0000f8e0   _ZNK5boost10filesystem
> 00015370  00009e07 R_386_JUMP_SLOT   0000e370   _ZN5boost10filesystem4
235,237c235,237
< 00015380  00007707 R_386_JUMP_SLOT   000078a0   _ZN5boost10filesystem6
< 00015384  0000b607 R_386_JUMP_SLOT   0000cf20   _ZN5boost10filesystem1
< 00015388  0000b807 R_386_JUMP_SLOT   0000f490   _ZN5boost10filesystem4
---
> 00015380  00007807 R_386_JUMP_SLOT   000078a0   _ZN5boost10filesystem6
> 00015384  0000b707 R_386_JUMP_SLOT   0000cf20   _ZN5boost10filesystem1
> 00015388  0000b907 R_386_JUMP_SLOT   0000f490   _ZN5boost10filesystem4
239c239
< 00015390  0000a007 R_386_JUMP_SLOT   000099f0   _ZN5boost10filesystem6
---
> 00015390  0000a107 R_386_JUMP_SLOT   000099f0   _ZN5boost10filesystem6
241c241
< 00015398  00008507 R_386_JUMP_SLOT   00005880   _ZN5boost10filesystem6
---
> 00015398  00008607 R_386_JUMP_SLOT   00005880   _ZN5boost10filesystem6
250c250
< 000153bc  0000d607 R_386_JUMP_SLOT   00010770   _ZNK5boost10filesystem
---
> 000153bc  0000d707 R_386_JUMP_SLOT   00010770   _ZNK5boost10filesystem
254,255c254,255
< 000153cc  0000d007 R_386_JUMP_SLOT   000092c0   _ZN5boost10filesystem6
< 000153d0  0000a407 R_386_JUMP_SLOT   0000f2b0   _ZNK5boost10filesystem
---
> 000153cc  0000d107 R_386_JUMP_SLOT   000092c0   _ZN5boost10filesystem6
> 000153d0  0000a507 R_386_JUMP_SLOT   0000f2b0   _ZNK5boost10filesystem
257c257
< 000153d8  0000cd07 R_386_JUMP_SLOT   000095f0   _ZN5boost10filesystem6
---
> 000153d8  0000ce07 R_386_JUMP_SLOT   000095f0   _ZN5boost10filesystem6
260c260
< 000153e4  00008f07 R_386_JUMP_SLOT   000069e0   _ZN5boost10filesystem6
---
> 000153e4  00009007 R_386_JUMP_SLOT   000069e0   _ZN5boost10filesystem6
269c269
< 00015408  0000ee07 R_386_JUMP_SLOT   00011ea0   _ZNK5boost10filesystem
---
> 00015408  0000ef07 R_386_JUMP_SLOT   00011ea0   _ZNK5boost10filesystem
272,273c272,273
< 00015414  0000ca07 R_386_JUMP_SLOT   0000f7d0   _ZNK5boost10filesystem
< 00015418  0000d107 R_386_JUMP_SLOT   0000df70   _ZNK5boost10filesystem
---
> 00015414  0000cb07 R_386_JUMP_SLOT   0000f7d0   _ZNK5boost10filesystem
> 00015418  0000d207 R_386_JUMP_SLOT   0000df70   _ZNK5boost10filesystem
277c277
< 00015428  0000c907 R_386_JUMP_SLOT   0000d2f0   _ZN5boost10filesystem1
---
> 00015428  0000ca07 R_386_JUMP_SLOT   0000d2f0   _ZN5boost10filesystem1
286,287c286,287
< 0001544c  0000b707 R_386_JUMP_SLOT   0000e190   _ZNK5boost10filesystem
< 00015450  0000c007 R_386_JUMP_SLOT   00011c70   _ZN5boost10filesystem6
---
> 0001544c  0000b807 R_386_JUMP_SLOT   0000e190   _ZNK5boost10filesystem
> 00015450  0000c107 R_386_JUMP_SLOT   00011c70   _ZN5boost10filesystem6
295c295
< 00015470  0000ea07 R_386_JUMP_SLOT   000063c0   _ZN5boost10filesystem6
---
> 00015470  0000eb07 R_386_JUMP_SLOT   000063c0   _ZN5boost10filesystem6
297c297
< 00015478  00008e07 R_386_JUMP_SLOT   00011170   _ZN5boost10filesystem1
---
> 00015478  00008f07 R_386_JUMP_SLOT   00011170   _ZN5boost10filesystem1
303c303
< 00015490  0000a707 R_386_JUMP_SLOT   0000ded0   _ZN5boost10filesystem4
---
> 00015490  0000a807 R_386_JUMP_SLOT   0000ded0   _ZN5boost10filesystem4
306c306
< 0001549c  00009e07 R_386_JUMP_SLOT   00005490   _ZN5boost10filesystem2
---
> 0001549c  00009f07 R_386_JUMP_SLOT   00005490   _ZN5boost10filesystem2
319c319
< 000154d0  00007d07 R_386_JUMP_SLOT   0000efd0   _ZNK5boost10filesystem
---
> 000154d0  00007e07 R_386_JUMP_SLOT   0000efd0   _ZNK5boost10filesystem
325,326c325,326
< 000154e8  00008c07 R_386_JUMP_SLOT   00010eb0   _ZN5boost10filesystem1
< 000154ec  00008207 R_386_JUMP_SLOT   000091c0   _ZN5boost10filesystem6
---
> 000154e8  00008d07 R_386_JUMP_SLOT   00010eb0   _ZN5boost10filesystem1
> 000154ec  00008307 R_386_JUMP_SLOT   000091c0   _ZN5boost10filesystem6
329c329
< 000154f8  00008d07 R_386_JUMP_SLOT   0000ea70   _ZN5boost10filesystem4
---
> 000154f8  00008e07 R_386_JUMP_SLOT   0000ea70   _ZN5boost10filesystem4
334c334
< 0001550c  00009007 R_386_JUMP_SLOT   0000fbb0   _ZNK5boost10filesystem
---
> 0001550c  00009107 R_386_JUMP_SLOT   0000fbb0   _ZNK5boost10filesystem
337,340c337,340
< 00015518  0000eb07 R_386_JUMP_SLOT   00011270   _ZN5boost10filesystem1
< 0001551c  0000b107 R_386_JUMP_SLOT   000114b0   _ZN5boost10filesystem1
< 00015520  00009b07 R_386_JUMP_SLOT   0000c640   _ZN5boost6detail26sp_e
< 00015524  00009c07 R_386_JUMP_SLOT   0000f000   _ZNK5boost10filesystem
---
> 00015518  0000ec07 R_386_JUMP_SLOT   00011270   _ZN5boost10filesystem1
> 0001551c  0000b207 R_386_JUMP_SLOT   000114b0   _ZN5boost10filesystem1
> 00015520  00009c07 R_386_JUMP_SLOT   0000c640   _ZN5boost6detail26sp_e
> 00015524  00009d07 R_386_JUMP_SLOT   0000f000   _ZNK5boost10filesystem
342c342
< 0001552c  0000a607 R_386_JUMP_SLOT   0000dd00   _ZN5boost10filesystem4
---
> 0001552c  0000a707 R_386_JUMP_SLOT   0000dd00   _ZN5boost10filesystem4
344c344
< 00015534  0000ad07 R_386_JUMP_SLOT   00007aa0   _ZN5boost10filesystem6
---
> 00015534  0000ae07 R_386_JUMP_SLOT   00007aa0   _ZN5boost10filesystem6
591,597c591,597
<    234: 000063c0  1559 FUNC    GLOBAL DEFAULT   10 _ZN5boost10filesystem6det
<    235: 00011270    81 FUNC    GLOBAL DEFAULT   10 _ZN5boost10filesystem19po
<    236: 00009020   405 FUNC    GLOBAL DEFAULT   10 _ZN5boost10filesystem6det
<    237: 0000c6e0    30 FUNC    WEAK   DEFAULT   10 _ZN5boost6detail17sp_coun
<    238: 00011ea0    59 FUNC    GLOBAL DEFAULT   10 _ZNK5boost10filesystem6de
<    239: 000155b8     8 OBJECT  WEAK   DEFAULT   24 _ZGVZNK5boost10filesystem
<    240: 00012180    99 OBJECT  WEAK   DEFAULT   12 _ZTSN75_GLOBAL__N_libs_fi
---
>    234: 00015064    12 OBJECT  WEAK   DEFAULT   19 _ZTIN75_GLOBAL__N_libs_fi
>    235: 000063c0  1559 FUNC    GLOBAL DEFAULT   10 _ZN5boost10filesystem6det
>    236: 00011270    81 FUNC    GLOBAL DEFAULT   10 _ZN5boost10filesystem19po
>    237: 00009020   405 FUNC    GLOBAL DEFAULT   10 _ZN5boost10filesystem6det
>    238: 0000c6e0    30 FUNC    WEAK   DEFAULT   10 _ZN5boost6detail17sp_coun
>    239: 00011ea0    59 FUNC    GLOBAL DEFAULT   10 _ZNK5boost10filesystem6de
>    240: 000155b8     8 OBJECT  WEAK   DEFAULT   24 _ZGVZNK5boost10filesystem
619,623c619,623
<       0  42         ( 32.1%)
<       1  49         ( 37.4%)     34.8%
<       2  32         ( 24.4%)     80.1%
<       3  4          (  3.1%)     88.7%
<       4  4          (  3.1%)    100.0%
---
>       0  41         ( 31.3%)
>       1  50         ( 38.2%)     35.5%
>       2  32         ( 24.4%)     80.9%
>       3  5          (  3.8%)     91.5%
>       4  3          (  2.3%)    100.0%`

(I had to abridge some entries in the file to fit in the post). For the most part, it looks like the line number of some of these entries differ. What could possibly change the order of symbol entries in an ELF file?

Was it helpful?

Solution

I finally found the answer, and I can't believe it took me so long to find it. Anonymous namespaces are at issue here, not boost in and of itself. Apparently, boost 1_50 contains a few anonymous namespaces. It looks like the compiler I am using, gcc 4.1.1's ABI or whatever(and perhaps others more recent or older even) generates a new and different UUID to prefix symbols in these anonymous namespaces each time a translation unit is compiled, I guess for reasons of applying uniqueness to symbols for external linkage (correct? not correct?). The solution in this case is to use the -frandom-seed flag provided by the compiler. I was finally tipped off to what might be going on when I randomly came across this page.

Here is the documentation for the frandom-seed compiler flag.

My use case for this ended up being -frandom-seed="0"

In the end it had really nothing to do with __DATE__ and __TIME__ macros (until dealing with boost WAVE and SPIRIT, which do contain them in 1.50).

This one really beat me up.

Under the tag "binary reproducibility" stack overflow didn't seem to have anything regarding this. It seems other phrases besides "binary reproducibility" were used in other articles, so the search parameters I used didn't come up with anything. Who knew? Not me, chief.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top