[Insight-users] Compiling ITK4 in 32 bit mode on 64 bit linux

Andriy Fedorov fedorov at bwh.harvard.edu
Thu Feb 17 14:31:05 EST 2011


Hi,

In short:

1) is there a set of specific instructions on building ITK4 on 32 bit
platform? (I haven't found any, and I have problems compiling it, see
below)

2) are there any 32-bit machines on ITK4 dashboard?

The long story is below ... All I wanted to do is to test some
functionality of 3D Slicer, since we found some issues on 32-bit
build.


I am trying to compile current checkout of ITK4 on Ubuntu 10.04 x64 in
32-bit mode.

To do this, I installed gcc-multilib support, and specified -m32 flag
for CC and CXX.

My first attempt to compile resulted in the following error:

In file included from /home/andrey/local/src/ITK/Code/Common/itkMathDetail.h:42,
                 from /home/andrey/local/src/ITK/Code/Common/itkMath.h:32,
                 from /home/andrey/local/src/ITK/Code/Common/itkIndex.h:23,
                 from /home/andrey/local/src/ITK/Code/Common/itkPath.h:22,
                 from
/home/andrey/local/src/ITK/Code/Common/itkChainCodePath.h:21,
                 from
/home/andrey/local/src/ITK/Code/Common/itkChainCodePath2D.h:21,
                 from
/home/andrey/local/src/ITK/Code/Common/itkChainCodePath2D.cxx:18:
/usr/lib/gcc/x86_64-linux-gnu/4.4.3/include/emmintrin.h:32:3: error:
#error "SSE2 instruction set not enabled"

Following some advice from google, I added flags -msse2 and -msse4.
This resulted in the following error:

In file included from /home/andrey/local/src/ITK/Code/Common/itkMath.h:32,
                 from
/home/andrey/local/src/ITK/Testing/Code/Common/itkMathTest.cxx:22:
/home/andrey/local/src/ITK/Code/Common/itkMathDetail.h: In function
‘itk::int64_t itk::Math::Detail::RoundHalfIntegerToEven_64(double)’:
/home/andrey/local/src/ITK/Code/Common/itkMathDetail.h:280: error:
‘_mm_cvtsd_si64’ was not declared in this scope
/home/andrey/local/src/ITK/Code/Common/itkMathDetail.h: In function
‘itk::int64_t itk::Math::Detail::RoundHalfIntegerToEven_64(float)’:
/home/andrey/local/src/ITK/Code/Common/itkMathDetail.h:288: error:
‘_mm_cvtss_si64’ was not declared in this scope

Next I found this post:
http://old.nabble.com/Problems-building-itk-3.18-with-review-td28655590.html,
and tried to turn off VNL_CONFIG_ENABLE_SSE2_ROUNDING as suggested by
Bradley Lowekamp, still errors (similar errors no matter if I include
or exclude -msse2 and -msse4 flags):

In file included from /home/andrey/local/src/ITK/Code/Common/itkMathDetail.h:42,
                 from /home/andrey/local/src/ITK/Code/Common/itkMath.h:32,
                 from /home/andrey/local/src/ITK/Code/Common/itkIndex.h:23,
                 from /home/andrey/local/src/ITK/Code/Common/itkPath.h:22,
                 from
/home/andrey/local/src/ITK/Code/Common/itkChainCodePath.h:21,
                 from
/home/andrey/local/src/ITK/Code/Common/itkChainCodePath2D.h:21,
                 from
/home/andrey/local/src/ITK/Code/Common/itkChainCodePath2D.cxx:18:
/usr/lib/gcc/x86_64-linux-gnu/4.4.3/include/emmintrin.h:32:3: error:
#error "SSE2 instruction set not enabled"
In file included from /home/andrey/local/src/ITK/Code/Common/itkMath.h:32,
                 from /home/andrey/local/src/ITK/Code/Common/itkIndex.h:23,
                 from /home/andrey/local/src/ITK/Code/Common/itkPath.h:22,
                 from
/home/andrey/local/src/ITK/Code/Common/itkChainCodePath.h:21,
                 from
/home/andrey/local/src/ITK/Code/Common/itkChainCodePath2D.h:21,
                 from
/home/andrey/local/src/ITK/Code/Common/itkChainCodePath2D.cxx:18:
/home/andrey/local/src/ITK/Code/Common/itkMathDetail.h: In function
‘itk::int32_t itk::Math::Detail::RoundHalfIntegerToEven_32(double)’:
/home/andrey/local/src/ITK/Code/Common/itkMathDetail.h:176: error:
‘_mm_set_sd’ was not declared in this scope
/home/andrey/local/src/ITK/Code/Common/itkMathDetail.h:176: error:
‘_mm_cvtsd_si32’ was not declared in this scope
/home/andrey/local/src/ITK/Code/Common/itkMathDetail.h: In function
‘itk::int32_t itk::Math::Detail::RoundHalfIntegerToEven_32(float)’:
/home/andrey/local/src/ITK/Code/Common/itkMathDetail.h:184: error:
‘_mm_set_ss’ was not declared in this scope
/home/andrey/local/src/ITK/Code/Common/itkMathDetail.h:184: error:
‘_mm_cvtss_si32’ was not declared in this scope
/home/andrey/local/src/ITK/Code/Common/itkMathDetail.h: In function
‘itk::int64_t itk::Math::Detail::RoundHalfIntegerToEven_64(double)’:
/home/andrey/local/src/ITK/Code/Common/itkMathDetail.h:280: error:
‘_mm_set_sd’ was not declared in this scope
/home/andrey/local/src/ITK/Code/Common/itkMathDetail.h:280: error:
‘_mm_cvtsd_si64’ was not declared in this scope
/home/andrey/local/src/ITK/Code/Common/itkMathDetail.h: In function
‘itk::int64_t itk::Math::Detail::RoundHalfIntegerToEven_64(float)’:
/home/andrey/local/src/ITK/Code/Common/itkMathDetail.h:288: error:
‘_mm_set_ss’ was not declared in this scope
/home/andrey/local/src/ITK/Code/Common/itkMathDetail.h:288: error:
‘_mm_cvtss_si64’ was not declared in this scope


In addition to the errors, there is this somewhat bothering warning:

In file included from /usr/include/string.h:640,
                 from
/home/andrey/local/src/ITK/Utilities/gdcm/Source/Common/gdcmTrace.h:27,
                 from
/home/andrey/local/src/ITK/Utilities/gdcm/Source/Common/gdcmLegacyMacro.h:23,
                 from
/home/andrey/local/src/ITK/Utilities/gdcm/Source/Common/gdcmTypes.h:20,
                 from
/home/andrey/local/src/ITK/Utilities/gdcm/Source/Common/gdcmObject.h:18,
                 from
/home/andrey/local/src/ITK/Utilities/gdcm/Source/DataStructureAndEncodingDefinition/gdcmFile.h:18,
                 from
/home/andrey/local/src/ITK/Utilities/gdcm/Source/MediaStorageAndFileFormat/gdcmPrinter.h:47,
                 from
/home/andrey/local/src/ITK/Utilities/gdcm/Source/MediaStorageAndFileFormat/gdcmPrinter.cxx:15:
In function ‘void* memcpy(void*, const void*, size_t)’,
    inlined from ‘void gdcm::PrintValue(const gdcm::VR::VRType&, const
gdcm::VM&, const gdcm::Value&)’ at
/home/andrey/local/src/ITK/Utilities/gdcm/Source/MediaStorageAndFileFormat/gdcmPrinter.cxx:420:
/usr/include/bits/string3.h:52: warning: call to void*
__builtin___memcpy_chk(void*, const void*, unsigned int, unsigned int)
will always overflow destination buffer

My system information:

* Ubuntu 10.04

* 2.6.32-28-generic #55-Ubuntu SMP Mon Jan 10 23:42:43 UTC 2011 x86_64 GNU/Linux

* gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3

Once these issues are resolved, I will be happy to contribute results
of ctesting on my working build to the ITK4 dashboard.

thanks

--
Andriy Fedorov, Ph.D.

Research Fellow
Brigham and Women's Hospital
Harvard Medical School
75 Francis Street
Boston, MA 02115 USA
fedorov at bwh.harvard.edu
(617) 525-6258 (office)


More information about the Insight-users mailing list