[Insight-developers] Problem again in NRRDIO

Michel Audette michel.audette at kitware.com
Wed Mar 24 17:44:43 EDT 2010


Btw, these 4 occurences reflect the output of nm.
The LCs are picked up with the r character in the perl match.

0000000000000000 r .LC0
0000000000000008 r .LC2

What to do? Match based on the 3rd rather than 2nd entry?

Michel

On Wed, Mar 24, 2010 at 5:33 PM, Gordon L. Kindlmann <glk at uchicago.edu>wrote:

> Hi,
>
> Michel, can you describe your computer set-up so that Daniel can see if he
> has something comparable that would allow him to do the test of which nm
> symbol codes are actually needed?  I don't want this to drag on any longer
> than necessary, and Daniel will probably be able to deal with this more
> efficiently than the combined emailings and such between us all.
>
> I'm very concerned that this latest version includes too much information,
> which may cause other problems.  This line:
>
> #define airDisableDio itk_airDisableDio
>
> actually appears 4 times; why?  There are also lines like this:
>
> #define .LC0 itk_.LC0
> #define .LC1 itk_.LC1
> #define CSWTCH.37 itk_CSWTCH.37
>
> which almost certainly have nothing to do with names of symbols that are
> being defined by my code (and they may be OS-specific).  There are also
> lines like this:
>
> #define me.7432 itk_me.7432
> #define me.7477 itk_me.7477
> #define me.7530 itk_me.7530
> #define me.7690 itk_me.7690
>
> which are probably referring to the "me" variables that I use *inside*
> functions:
>
>  static const char me[]="nrrdBasicInfoCopy";
>
> but there is absolutely no way that you're going to get linking conflicts
> because of these "me" symbols; this is the safest way of having a static
> string constant associated with a function.
>
> It sounds like there isn't a well-defined procedure in ITK for doing
> name-mangling in an automatic and reliable way; so we seem to be the
> pioneers here, for better or for worse.
>
> Gordon
>
>
> On Mar 24, 2010, at 3:45 PM, Michel Audette wrote:
>
>  Daniel,
>>
>> please give this one a try...
>>
>> Best wishes,
>>
>> Michel
>>
>> On Wed, Mar 24, 2010 at 4:42 PM, Michel Audette <
>> michel.audette at kitware.com> wrote:
>> Think that I found it.
>>
>> Needs a t, b and r at least in the perl script...
>>
>>  t _nrrdSprintCH
>> ...
>> b _nrrdSanity.8527
>> ...
>> r _nrrdGzErrMsg
>>
>> Michel
>>
>>
>> On Tue, Mar 23, 2010 at 6:55 PM, Daniel Blezek <Blezek.Daniel at mayo.edu>
>> wrote:
>> Ok, dumped itk header in NrrdIO.  Here are the remaining naked teem
>> symbols (or at least some of them).
>>
>> revelation:Insight-macosx blezek$ make -C Utilities/NrrdIO/ clean && make
>> -C Utilities/NrrdIO/
>> <snip>
>> [100%] Built target ITKNrrdIO
>> revelation:Insight-macosx blezek$ date
>> Tue Mar 23 16:53:30 CDT 2010
>> revelation:Insight-macosx blezek$ ls -ltr bin/libITKNrrdIO.a
>> -rw-r--r--  1 blezek  staff  321600 Mar 23 16:52 bin/libITKNrrdIO.a
>> revelation:Insight-macosx blezek$ nm bin/libITKNrrdIO.a | grep -v itk |
>> grep nrrd
>> 00001bd0 t __nrrdSprintCH
>> 00001980 t __nrrdSprintDB
>> 000019c0 t __nrrdSprintFL
>> 00001ad0 t __nrrdSprintIN
>> 00001a50 t __nrrdSprintLL
>> 00001b50 t __nrrdSprintSH
>> 00001b90 t __nrrdSprintUC
>> 00001a90 t __nrrdSprintUI
>> 00001a10 t __nrrdSprintUL
>> 00001b10 t __nrrdSprintUS
>> 00003c88 b __nrrdSanity.6421
>> 000004e0 t __nrrdGzCheckHeader
>> 00000130 t __nrrdGzDestroy
>> 00001e40 s __nrrdGzErrMsg
>> revelation:Insight-macosx blezek$ nm bin/libITKNrrdIO.a | grep -v itk |
>> grep air
>> 00000fac b __airSanity.5193
>> revelation:Insight-macosx blezek$ nm bin/libITKNrrdIO.a | grep -v itk |
>> grep biff
>> bin/libITKNrrdIO.a(biffbiff.o):
>> bin/libITKNrrdIO.a(biffmsg.o):
>> revelation:Insight-macosx blezek$ nm bin/libITKNrrdIO.a | grep -v itk |
>> grep bmsg
>> 00001594 b __bmsg
>> 00001598 b __bmsgArr
>> 00001590 b __bmsgNum
>> revelation:Insight-macosx blezek$
>>
>>
>>
>> On 3/23/10 3:38 PM, "Michel Audette" <michel.audette at kitware.com> wrote:
>>
>> Hi Daniel,
>>
>> I have another file for you. I meant to send it before to you, but
>> mistakenly only sent it to Gordon.
>>
>> Please try the enclosed.
>>
>> Michel
>>
>> On Tue, Mar 23, 2010 at 5:00 PM, Michel Audette <
>> michel.audette at kitware.com> wrote:
>> With both lines modified in the manner suggested by Gordon,
>>    if (m/ [TBDRS] /) {
>>        s|.* [TBDRS] (.*)|$1|g;
>> the outcome is a little different.
>>
>> michel at michel-desktop:~/tools/Insight_ALL/generatedNrrdIO$ diff
>> itk_NrrdIO_mangle.h itk_NrrdIO_mangleOld.h
>> 89d88
>> < #define airDisableDio itk_airDisableDio
>> 109d107
>> < #define airStrtokQuoting itk_airStrtokQuoting
>> 153d150
>> < #define _biffMsgNoop itk__biffMsgNoop
>> 353,357d349
>> < #define nrrdStateDisableContent itk_nrrdStateDisableContent
>> < #define nrrdStateGrayscaleImage3D itk_nrrdStateGrayscaleImage3D
>> < #define nrrdStateKeyValuePairsPropagate
>> itk_nrrdStateKeyValuePairsPropagate
>> < #define nrrdStateKeyValueReturnInternalPointers
>> itk_nrrdStateKeyValueReturnInternalPointers
>> < #define nrrdStateKindNoop itk_nrrdStateKindNoop
>> 359d350
>> < #define nrrdStateVerboseIO itk_nrrdStateVerboseIO
>>
>> Try that?
>>
>> Michel
>>
>>
>> On Tue, Mar 23, 2010 at 4:56 PM, Michel Audette <
>> michel.audette at kitware.com> wrote:
>> Hi Gordon,
>>
>> only the line substitution that you suggested was implemented in the
>> mangle.pl <http://mangle.pl> . Had you intende to apply the same change
>> to the if line just above. I didn't notice until now.
>>
>> Michel
>>
>>
>> On Tue, Mar 23, 2010 at 5:53 PM, Daniel Blezek <Blezek.Daniel at mayo.edu>
>> wrote:
>> Ok,  at least one symbol made it through unscathed.
>>
>> ld: duplicate symbol _airStrtokQuoting in
>> /Users/blezek/Source/Insight-macosx/bin/libITKNrrdIO.a(string.o) and
>> ../bin/libteem.a(string.o)
>>
>> Here are the non-itk procteced symbols:
>>
>> nm /Users/blezek/Source/Insight-macosx/bin/libITKNrrdIO.a | grep -v itk >
>> Tmp.txt
>>
>> + some editing.
>>
>>
>>
>> On 3/23/10 2:33 PM, "Michel Audette" <michel.audette at kitware.com <
>> http://michel.audette@kitware.com> > wrote:
>>
>> Hi Daniel,
>>
>> here it is...
>>
>> Michel
>>
>> On Tue, Mar 23, 2010 at 4:29 PM, Gordon L. Kindlmann <glk at uchicago.edu <
>> http://glk@uchicago.edu> > wrote:
>> Hi,
>>
>> so can you try changing in mangle.pl <http://mangle.pl>  <
>> http://mangle.pl>
>>
>>        s|.* [TDRS] (.*)|$1|g;
>>
>> to
>>
>>        s|.* [TBDRS] (.*)|$1|g;
>>
>> and send the resulting itk_NrrdIO_mangle.h to Daniel so he can see if it
>> fixes the problem?
>>
>> Gordon
>>
>>
>>
>> On Mar 23, 2010, at 3:25 PM, Michel Audette wrote:
>>
>> defaultsNrrd.o:
>> 0000000000000010 D nrrdDefaultCenter
>> 0000000000000018 D nrrdDefaultSpacing
>> 0000000000000004 D nrrdDefaultWriteBareText
>> 0000000000000008 D nrrdDefaultWriteCharsPerLine
>> 0000000000000000 D nrrdDefaultWriteEncodingType
>> 000000000000000c D nrrdDefaultWriteValsPerLine
>> 0000000000000020 D nrrdStateAlwaysSetContent
>> 0000000000000008 B nrrdStateDisableContent
>> 000000000000000c B nrrdStateGrayscaleImage3D
>> 0000000000000004 B nrrdStateKeyValuePairsPropagate
>> 0000000000000010 B nrrdStateKeyValueReturnInternalPointers
>> 0000000000000014 B nrrdStateKindNoop
>> 0000000000000028 D nrrdStateUnknownContent
>> 0000000000000000 B nrrdStateVerboseIO
>>
>> We can talk on the phone if you prefer... Let me know.
>>
>> Cheers,
>>
>> Michel
>>
>> On Tue, Mar 23, 2010 at 4:23 PM, Gordon L. Kindlmann <glk at uchicago.edu <
>> http://glk@uchicago.edu> > wrote:
>> Hello,
>>
>> Ok, so the question is, *how* is nrrdStateGrayscaleImage3D listed?  there
>> is probably some cryptic single letter code that identifies the type of
>> symbol.  mangle.pl <http://mangle.pl>  <http://mangle.pl>  is using these
>> letter codes to distinguish between symbols that the NrrdIO library is
>> actually supplying, versus merely using, and the problem is that
>> nrrdStateGrayscaleImage3D is actually being supplied, but is not being
>> recorded as such in the output of mangle.pl <http://mangle.pl>  <
>> http://mangle.pl> .  Line 66 of mangle.pl <http://mangle.pl>  <
>> http://mangle.pl>  is where this decision is made; so it may need
>> tweaking.
>>
>>
>>
>> Gordon
>>
>>
>> On Mar 23, 2010, at 3:18 PM, Michel Audette wrote:
>>
>> Hi Gordon,
>>
>> According to this procedure, _nrrdStateGrayscaleImage3D fails to appear,
>> although nrrdStateGrayscaleImage3D is listed in the result of nm.
>>
>> What next?
>>
>> Michel
>>
>> On Tue, Mar 23, 2010 at 2:07 PM, Gordon L. Kindlmann <glk at uchicago.edu <
>> http://glk@uchicago.edu> > wrote:
>> Hello,
>>
>> Shoot- sorry about this; I was just thinking the NrrdIO update was
>> finished!
>>
>> There indeed probably aren't any tests for checking compiling applications
>> against both Teem (containing the air, biff, and nrrd libraries that these
>> symbols are coming from) and ITK (containing NrrdIO, the fraction of Teem
>> required for Nrrd file IO).  Aren't Slicer builds doing this?  Are there
>> analogous tests for, say, compiling applications against non-ITK zlib and
>> ITK name-mangled zlib, which can be copied from?
>>
>> I can tell that these names are for the global variables that exist in
>> NrrdIO.  These are probably not getting correctly picked up from the list of
>> symbols in the NrrdIO library, which mangle.pl <http://mangle.pl>  <
>> http://mangle.pl>  does by using "nm".
>>
>> Michel, can go through the NrrdIO process on whatever platform you used
>> last, and at the point of running mangle.pl <http://mangle.pl>  <
>> http://mangle.pl> , can you run "nm" manually and grep for, say,
>> _nrrdStateGrayscaleImage3D, and see how that symbol is identified?  Line 66
>> of mangle.pl <http://mangle.pl>  <http://mangle.pl>  apparently is
>> missing this.
>>
>>
>>
>> Gordon
>>
>>
>> On Mar 23, 2010, at 12:33 PM, Daniel Blezek wrote:
>>
>> Hi,
>>
>>  We link both against NRRD and ITK in our applications.  At the end of
>> February, the mangled ITK names were changed from what I fixed.  Clearly,
>> this is not tested properly, because today I updated ITK and re-built:
>>
>> 34>ITKNrrdIO.lib(string.obj) : error LNK2005: _airStrtokQuoting already
>> defined in teem.lib(string.obj)
>> 34>ITKNrrdIO.lib(defaultsNrrd.obj) : error LNK2005: _nrrdStateVerboseIO
>> already defined in teem.lib(defaultsNrrd.obj)
>> 34>ITKNrrdIO.lib(defaultsNrrd.obj) : error LNK2005:
>> _nrrdStateKeyValuePairsPropagate already defined in
>> teem.lib(defaultsNrrd.obj)
>> 34>ITKNrrdIO.lib(defaultsNrrd.obj) : error LNK2005:
>> _nrrdStateDisableContent already defined in teem.lib(defaultsNrrd.obj)
>> 34>ITKNrrdIO.lib(defaultsNrrd.obj) : error LNK2005:
>> _nrrdStateGrayscaleImage3D already defined in teem.lib(defaultsNrrd.obj)
>> 34>ITKNrrdIO.lib(defaultsNrrd.obj) : error LNK2005:
>> _nrrdStateKeyValueReturnInternalPointers already defined in
>> teem.lib(defaultsNrrd.obj)
>> 34>ITKNrrdIO.lib(defaultsNrrd.obj) : error LNK2005: _nrrdStateKindNoop
>> already defined in teem.lib(defaultsNrrd.obj)
>> 34>ITKNrrdIO.lib(biffmsg.obj) : error LNK2005: __biffMsgNoop already
>> defined in teem.lib(biffmsg.obj)
>> 34>ITKNrrdIO.lib(dio.obj) : error LNK2005: _airDisableDio already defined
>> in teem.lib(dio.obj)
>>
>> Could “Michel” (according to CVS) please have a closer look at this?  I
>> had tweaked this once before, and my changes were blown away by the (broken)
>> mangle.pl <http://mangle.pl>  <http://mangle.pl>  script.
>>
>>
>>
>> I’ll go back through and manually add the names if necessary.
>>
>> Cheers,
>> -dan
>>
>> --
>> Daniel Blezek, PhD
>> Medical Imaging Informatics Innovation Center
>>
>> P 127 or (77) 8 8886
>> T 507 538 8886
>> E blezek.daniel at mayo.edu
>>
>> Mayo Clinic
>> 200 First St. S.W.
>> Harwick SL-44
>> Rochester, MN 55905
>> mayoclinic.org
>>
>>
>>
>>
>> --
>> Michel Audette, Ph.D.
>> R & D Engineer,
>> Kitware Inc.,
>> Chapel Hill, N.C.
>>
>>
>>
>>
>> --
>> Michel Audette, Ph.D.
>> R & D Engineer,
>> Kitware Inc.,
>> Chapel Hill, N.C.
>>
>> <itk_NrrdIO_mangle.h>
>>
>
>


-- 
Michel Audette, Ph.D.
R & D Engineer,
Kitware Inc.,
Chapel Hill, N.C.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/mailman/private/insight-developers/attachments/20100324/a03e5230/attachment-0001.htm>


More information about the Insight-developers mailing list