From: Shan-leung Maverick WOO Date: 2001-06-23T02:42:42+09:00 Subject: [ruby-talk:16777] mkexports.rb and VC6SP5 Hello, For some reason my VC6 (SP5, running on Win2k) generate object files with symbols mangled with two under-scores: > File miniruby.map: > 0002:00000020 __real@40f0000000000000 004b0020 bignum.obj > 0002:00000030 __real@41cfffffff800000 004b0030 bignum.obj > 0002:00000040 __real@0000000000000000 004b0040 bignum.obj > 0002:00000050 __real@40efffe000000000 004b0050 bignum.obj > 0002:00000060 __real@412e848000000000 004b0060 eval.obj > 0002:00000070 __real@46293e5939a08cea 004b0070 eval.obj > 0002:00000080 __real@3eb0c6f7a0b5ed8d 004b0080 eval.obj > 0002:00000090 __real@3faeb851eb851eb8 004b0090 eval.obj > 0002:000000a0 __real@4010000000000000 004b00a0 math.obj > 0002:000000b0 __real@3ff0000000000000 004b00b0 math.obj > 0002:000000c0 __real@c1e0000000000000 004b00c0 numeric.obj > 0002:000000d0 __real@41dfffffffc00000 004b00d0 numeric.obj > 0002:000000e0 __real@c1d0000000000000 004b00e0 numeric.obj > 0002:000000f0 __real@3fe0000000000000 004b00f0 numeric.obj > 0002:00000100 __real@40e0000000000000 004b0100 random.obj > 0002:00000718 __real@408f400000000000 004b0718 time.obj However, mkexports.rb will cut the first under-score off to generate the def file. This works in the normal case when symbols are mangled with one under-score in the front, but not in the __ case. I searched the archive and three articles shows up: 9226, 9138 and 9264. The solution there seems to suggest that I should remove those offending declarations in the def file. I think that will work, but changing mkexports.rb may be a better solution: C:\ruby-1.6.4\win32>diff mkexports.rb mkexports.rb.old 9c9 < if l.sub!(/^_([^_])/, '\1') --- > if l.sub!(/^_/, '') Actually I have no time to dig out why VC will do this kind of mangling. (Any one have clues?) But for the moment I think this patch is worth putting into later Ruby distributions. Cheers! -- All the best, Maverick Woo P.S. For the record, my other Win2k machine running VC6 SP4 does not generate this kind of __-mangled symbols.