So... You think we should add a try compile to check for this bug and define 
"ITK_EXPLICIT_SPECIALIZATION_REQUIRES_EXPORT" appropriately?

Brad

On Mar 18, 2013, at 10:20 AM, Bill Lorensen <[email protected]> wrote:

> I think your solution is OK.
> 
> Looks like this is due to a MS compiler error:
> http://connect.microsoft.com/VisualStudio/feedback/details/753981
> 
> 
> 
> On Mon, Mar 18, 2013 at 6:28 AM, Bradley Lowekamp <[email protected]> 
> wrote:
> Bill,
> 
> It looks like my solution was less correct :(
> 
> As we are getting a bunch of compilation error on windows now:
> 
> http://open.cdash.org/viewBuildError.php?buildid=2848943
> 
> What concerned me about your approach was that is blanketly just changes the 
> export specification for all unspecified methods and classes. So it likely 
> will have un intended consequences sooner or later.
> 
> Perhaps we should just add some "ifdef GCC"s around the statements I added? 
> Better yet define "ITK_EXPLICIT_SPECIALIZATION_REQUIRES_EXPORT" in the 
> config...
> 
> Brad
> 
> 
> On Mar 16, 2013, at 10:39 AM, Bradley Lowekamp <[email protected]> wrote:
> 
>> Bill,
>> 
>> Looks like you caught a major issue right before the dashboard did :) You 
>> have impeccable timing!
>> 
>> I looked at this. And it  is just a case of a missing ITKCommon_Export. It's 
>> just a little tricky because you have the non-specilized declaration and 
>> definition. Then a specialized declaration. What's missing is a statement 
>> which says the method has been explicitly instantiated (this just happens to 
>> be a totally specialized version), but the statement is that same as if it'd 
>> been explicitly instantiated. This has been compiler dependent, and we use 
>> the ITKCommon_EXPORT macro for that. It's sounds like the extern keyword 
>> should to this in C++0x, but I hadn't looked at the closely.
>> 
>> I hope this help explains what's going on....
>> 
>> Brad
>> 
>> 
>> On Mar 15, 2013, at 10:31 PM, Bill Lorensen <[email protected]> wrote:
>> 
>>> There are issues with template specializations and -fvisibility=hidden. 
>>> From what I read no current compilers officially support this, but most do. 
>>> I guess my gcc on the MAXC does not.
>>> 
>>> I'll put a patch to gerrit that adds lines like these in 
>>> Common/src/CMakeLists.txt
>>>     if(APPLE)
>>>       set_source_files_properties( itkArrayOutputSpecialization.cxx 
>>> PROPERTIES
>>>         COMPILE_FLAGS -fvisibility=default )
>>>     endif()
>>> 
>>> When I do this, my gcc build is OK.
>>> 
>>> Bill
>>> 
>>> On Fri, Mar 15, 2013 at 7:00 PM, Bill Lorensen <[email protected]> 
>>> wrote:
>>> It has to do with symbol visibility. If I do nm on the ITKCommon lib, the 
>>> undefined symbols have "t" and not "T". "t" means the symbols are local. If 
>>> I remove the -fvisiibility=hidden flag from ITKCommon's CMakeLists.txt 
>>> file, the tests build fine.
>>> 
>>> 
>>> 
>>> On Fri, Mar 15, 2013 at 6:49 PM, Bradley Lowekamp <[email protected]> 
>>> wrote:
>>> Bill,
>>> 
>>> Are you able to compile the release? Or is it a  change since then?
>>> 
>>> Brad
>>> 
>>> On Mar 15, 2013, at 7:36 PM, Bill Lorensen <[email protected]> wrote:
>>> 
>>>> I see why  those statements are there.
>>>> 
>>>> Still need help.
>>>> 
>>>> On Fri, Mar 15, 2013 at 4:25 PM, Bill Lorensen <[email protected]> 
>>>> wrote:
>>>> More info. If I remove
>>>> template<> std::ostream & operator<< <double> (std::ostream & os, const 
>>>> Array< double > & arr);
>>>> template<> std::ostream & operator<< <float> (std::ostream & os, const 
>>>> Array< float > & arr);
>>>> 
>>>> Both my c++ and clang build fine.
>>>> 
>>>> What is the purpose of these lines?
>>>> 
>>>> Bill
>>>> 
>>>> On Fri, Mar 15, 2013 at 4:09 PM, Bill Lorensen <[email protected]> 
>>>> wrote:
>>>> Guys,
>>>> 
>>>> This is  on my Mac using:
>>>> c++ --version
>>>> c++ --version
>>>> i686-apple-darwin11-llvm-g++-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 
>>>> 5658) (LLVM build 2336.1.00)
>>>> 
>>>> My clang version builds fine.
>>>> 
>>>> Any ideas?
>>>> 
>>>> Bill
>>>> 
>>>> 
>>>> On Fri, Mar 15, 2013 at 11:52 AM, Bill Lorensen <[email protected]> 
>>>> wrote:
>>>> Folks,
>>>> 
>>>> It's been a few days since itk and tried a build.
>>>> 
>>>> Today I get Linking CXX executable ../../../../bin/ITKCommon1TestDriver
>>>> Undefined symbols for architecture x86_64:
>>>>   "std::basic_ostream<char, std::char_traits<char> >& itk::operator<< 
>>>> <float>(std::basic_ostream<char, std::char_traits<char> >&, 
>>>> itk::Array<float> const&)", referenced from:
>>>>       void CheckVariableLengthArrayTraits<itk::Array<float> 
>>>> >(itk::Array<float>)in itkNumericTraitsTest.cxx.o
>>>>       itkArrayTest(int, char**)in itkArrayTest.cxx.o
>>>>   "std::basic_ostream<char, std::char_traits<char> >& itk::operator<< 
>>>> <double>(std::basic_ostream<char, std::char_traits<char> >&, 
>>>> itk::Array<double> const&)", referenced from:
>>>>       void CheckVariableLengthArrayTraits<itk::Array<double> 
>>>> >(itk::Array<double>)in itkNumericTraitsTest.cxx.o
>>>> ld: symbol(s) not found for architecture x86_64
>>>> collect2: ld returned 1 exit status
>>>> make[2]: *** [bin/ITKCommon1TestDriver] Error 1
>>>> make[1]: *** 
>>>> [Modules/Core/Common/test/CMakeFiles/ITKCommon1TestDriver.dir/all] Error 2
>>>> make: *** [all] Error 2
>>>> 
>>>> Bill
>>>> 
>>>> 
>>>> 
>>>> 
>>>> -- 
>>>> Unpaid intern in BillsBasement at noware dot com
>>>> 
>>>> 
>>>> 
>>>> -- 
>>>> Unpaid intern in BillsBasement at noware dot com
>>>> 
>>>> 
>>>> 
>>>> -- 
>>>> Unpaid intern in BillsBasement at noware dot com
>>>> _______________________________________________
>>>> Powered by www.kitware.com
>>>> 
>>>> Visit other Kitware open-source projects at
>>>> http://www.kitware.com/opensource/opensource.html
>>>> 
>>>> Kitware offers ITK Training Courses, for more information visit:
>>>> http://kitware.com/products/protraining.php
>>>> 
>>>> Please keep messages on-topic and check the ITK FAQ at:
>>>> http://www.itk.org/Wiki/ITK_FAQ
>>>> 
>>>> Follow this link to subscribe/unsubscribe:
>>>> http://www.itk.org/mailman/listinfo/insight-developers
>>> 
>>> 
>>> 
>>> 
>>> -- 
>>> Unpaid intern in BillsBasement at noware dot com
>>> 
>>> 
>>> 
>>> -- 
>>> Unpaid intern in BillsBasement at noware dot com
>> 
> 
> 
> 
> 
> -- 
> Unpaid intern in BillsBasement at noware dot com

_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html

Kitware offers ITK Training Courses, for more information visit:
http://kitware.com/products/protraining.php

Please keep messages on-topic and check the ITK FAQ at:
http://www.itk.org/Wiki/ITK_FAQ

Follow this link to subscribe/unsubscribe:
http://www.itk.org/mailman/listinfo/insight-developers

Reply via email to