Due to the current gap in continued funding from the U.S. National Science Foundation (NSF), the NSF Unidata Program Center has temporarily paused most operations. See NSF Unidata Pause in Most Operations for details.
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.
netcdfgroup
archives: