[Insight-developers] Explicit instantiation linking issues on mac platform

Hans Johnson hans-johnson at uiowa.edu
Wed Sep 6 17:43:57 EDT 2006


Zach,

I should have been more explicit earlier, but I am building statically, and
the errors are occuring at link time rather than at run time.  The manual
fix is to re-arrange the library link order to put -lITKCommonExplicit
before -lITKCommon.  When I get back to that machine, I'll give a concrete
example.

The errors are of the "symbol not found" link error, and the symbols are
ones needed by ITKCommonExplicit and found in ITKCommon.

Thanks,
Hans



On 9/6/06 4:38 PM, "Zachary Pincus" <zpincus at stanford.edu> wrote:

> I think that the TARGET_LINK_LIBRARIES statement is trying to link
> ITKCommonExplicit into the ITKCommon library, so that an app can just
> link to the common lib and the explicit one will be pulled in.
> 
> Is that not working? What are the link errors you see when building
> applications?
> 
> You can check what libraries are linked to an object file (executable
> or other library) on OS X with 'otool -L'. It would be worth checking
> what's linked to libITKCommon.dylib, and in what order.
> 
> Zach
> 
> On Sep 6, 2006, at 8:20 AM, Hans Johnson wrote:
> 
>> Hello Fellow Developers!
>> 
>> I wanted to alert the group to a small issue with linking on mac
>> platform
>> with explicit instantiation, and get some advice on how to fix the
>> problem.
>> 
>> The issue is that when explicit instantiation is used the extra
>> ITKCommonExplicit library needs to be linked into the applications
>> along
>> with ITKCommon library.  The file  Insight/Code/Common/
>> CMakeLists.txt  code
>> has the following
>> 
>> IF(ITK_EXPLICIT_INSTANTIATION)
>>   TARGET_LINK_LIBRARIES (ITKCommon ITKCommonExplicit)
>> ENDIF(ITK_EXPLICIT_INSTANTIATION)
>> 
>> Which I interpret as "ITKCommon depends upon ITKCommonExplicit, so
>> whenever
>> you use -lITKCommon then also follow with -lITKCommonExplicit
>> during linking
>> stages".  The problem is that the linking dependancies are
>> backwards, and
>> that ITKCommonExplicit needs to preceed ITKCommon.
>> 
>> What needs to happen is that somehow ITKCommonExplicit needs to be
>> prepended
>> to many of the linking stages.
>> 
>> I would like some guidance on resolving this issues, because the
>> "easy way"
>> touches quite a lot of CmakeLists.txt files and adds complexity to
>> linking
>> logic.
>> 
>> 
>> Regards,
>> Hans
>> 
>> Food For Thought---Another less intrusive way to do this would be
>> to have
>> conditionals in the Insight/Code/Common/CMakeLists.txt file that
>> builds the
>> explicit instantiations right into the ITKCommon library rather
>> than having
>> a separate library.  This will make life a lot easier as the number
>> and
>> names of the library linking would be constant across configuration
>> options.
>> 
>> 
>> _______________________________________________
>> Insight-developers mailing list
>> Insight-developers at itk.org
>> http://www.itk.org/mailman/listinfo/insight-developers
> 



More information about the Insight-developers mailing list