[Insight-developers] Explicit instantiation linking issues on
mac platform
Hans Johnson
hans-johnson at uiowa.edu
Wed Sep 6 18:07:50 EDT 2006
Julien,
The problems occur in compiling the Testing and Examples directories under
ITK.
Hans
On 9/6/06 4:55 PM, "Julien Jomier" <julien.jomier at kitware.com> wrote:
> Hans,
>
> Do you get the error when compiling ITK or an external program using ITK?
>
> Julien
>
> Hans Johnson wrote:
>> 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
>>
>> _______________________________________________
>> 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