Re: [netcdfgroup] Linker option ordering when linking to HDF5

Thanks Cedric and Mario,

Apart from demonstrating that my C/C++ is a bit rusty ;-), I think there is a 
take-home message here.  Linking code against NetCDF has got a lot more complex 
with NetCDF4.  The excellent documentation would be further improved with tips 
on compiling and linking.

If this can be done I'd also recommend pointing out the usefulness of -fPIC.
I often find NetCDF libraries are installed statically without 
position-independent code.  This makes them unsuitable for wrapping inside 
dynamic libraries used in dynamic language bindings: e.g. CDAT and 
netcdf4-python

Thanks,
Stephen.

---
Stephen Pascoe  +44 (0)1235 445980
British Atmospheric Data Centre
Rutherford Appleton Laboratory

-----Original Message-----
From: Cedric Roux [mailto:cedric.roux@xxxxxxxxxx] 
Sent: 13 September 2010 14:35
To: Pascoe, Stephen (STFC,RAL,SSTD)
Cc: netcdfgroup@xxxxxxxxxxxxxxxx
Subject: Re: [netcdfgroup] Linker option ordering when linking to HDF5

stephen.pascoe@xxxxxxxxxx wrote:
> I've noticed that when building statically linked executables the 
> order of the link options is important.  For instance:
>  
> $ g++ -static -L... -I... foo.c -lnetcdf -lhdf5 -lhdf5_hl -lm -lz -o 
> foo
> /usr/local/lib/libhdf5_hl.a(H5LT.o): In function `H5LT_dtype_to_text':
> H5LT.c:(.text+0x26e4): undefined reference to `H5Tget_cset'
> H5LT.c:(.text+0x290b): undefined reference to `H5Tset_cset'
> H5LT.c:(.text+0x2a55): undefined reference to `H5Tset_cset'
> H5LT.c:(.text+0x2c4f): undefined reference to `H5Tget_tag'
> /usr/local/QC/lib/libhdf5_hl.a(H5LTparse.o): In function `H5LTyyparse':
> H5LTparse.c:(.text+0xe85): undefined reference to `H5Tset_tag'
> H5LTparse.c:(.text+0x1077): undefined reference to `H5Tset_cset'
> collect2: ld returned 1 exit status
> 
> However this works:
> $ g++ -static -L... -I... foo.c -lnetcdf -lhdf5_hl -lhdf5 -lm -lz -o 
> foo

g++ -static -L... -I... foo.c -Wl,--start-group -lnetcdf -lhdf5 
g++ -lhdf5_hl -lm -lz -Wl,--end-group -o foo
may work too (not tested). See the manpage of 'ld'.
--start-group/--end-group is what you're after.
Hope that helps.
Cédric
--
Scanned by iCritical.



  • 2010 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the netcdfgroup archives: