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 -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