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.