[Insight-users] Link errors with static libs (shared fixes problems!)

Zachary Pincus zpincus at stanford.edu
Wed, 28 Apr 2004 09:56:59 -0700


I'm definitely using cmake to build my project... the output below is 
the offending command when the "verbose makefile" option is set.

Anyone have any thoughts as to what I should look at to try to figure 
out what's going on here?

Thanks,

Zach


On Apr 28, 2004, at 5:43 AM, William A. Hoffman wrote:

> With static linking the order of the libraries is important because
> it is a single pass operation.  If you use CMake to build the project,
> the order is done correctly automatically.
>
> You may want to consider using cmake to build your application.
>
> -Bill
>
>
> At 04:39 AM 4/28/2004, Zachary Pincus wrote:
>> Hello, and I promise that this is my last plaintive request for 
>> tonight...
>>
>> After finally getting ITK updated from the CVS and compiled, I've run 
>> into strange linker errors when rebuilding my applications. 
>> Basically, they're complaining that certain symbols are undefined; 
>> however I can check the libs and verify that they're around.
>>
>> Here's the really strange part: this only occurs when I'm using the 
>> static libraries. If I rebuild ITK with the same settings but with 
>> "build shared libs" set to "ON", and then rebuild my project, 
>> everything works just fine. I'm using OS X 10.3.3 with gcc 3.3. 
>> "Explicit Instantiations" are turned off.
>>
>> Here is the specific error (the Cellxxxx libraries are my own):
>>
>> Building executable /.../ImageExtractionAndPCATester...
>> c++        -ftemplate-depth-50 -no-cpp-precomp -Wno-long-double 
>> -fmessage-length=0 -fPIC  ./ImageExtractionAndPCATester.o    [link 
>> directories snipped]  -lITKCommon -lITKIO -lCellExplorerCommon 
>> -lCellExtractor -lCellFeatures -lITKCommon -litkvnl_inst 
>> -litkvnl_algo -litkvnl -litkvcl -litknetlib -lm -litksys -lpthread 
>> -litkpng -litktiff -litkjpeg -lm -lITKMetaIO -litkzlib 
>> -lITKDICOMParser -lITKEXPAT
>> ld: Undefined symbols:
>> itk::ImageIOBase::SetNumberOfDimensions(unsigned)
>> itk::ImageIOFactory::CreateImageIO(char const*, 
>> itk::ImageIOFactory::FileModeType)
>> itk::operator<<(std::basic_ostream<char, std::char_traits<char> >&, 
>> itk::ImageIORegion const&)
>> itk::ImageIOBase::GetImageSizeInBytes() const
>> vtable for itk::ImageIORegion
>>
>> Why would these symbols be undefined? I can find them in the 
>> linked-in libraries with nm well enough, and other symbols from the 
>> IO and Common (and other) libraries are found easily enough. Can 
>> anyone provide any clues as to where to look to deal with this? Why 
>> is this magically fixed with the dynamic libs? As usual, the linker 
>> is sufficiently mysterious to me that I'm not much help.
>>
>> Thanks,
>>
>> Zach Pincus
>>
>> Department of Biochemistry and Program in Biomedical Informatics
>> Stanford University School of Medicine
>>
>> _______________________________________________
>> Insight-users mailing list
>> Insight-users at itk.org
>> http://www.itk.org/mailman/listinfo/insight-users
>
> _______________________________________________
> Insight-users mailing list
> Insight-users at itk.org
> http://www.itk.org/mailman/listinfo/insight-users
>