Undefined reference to symbol 'pow@@GLIBC_2.29'

I’m trying to write a derivation for gpetview, which uses autoconf for installation.

I get the error

/nix/store/0q9hm42fapihzj1d64nxqmbml7fpb2d6-binutils-2.38/bin/ld: mk_seq.o: undefined reference to symbol 'pow@@GLIBC_2.29'
in response to this `gcc` invocation
gcc  -g -O2   -o gpetview main.o support.o interface.o callbacks.o draw_colorbar.o get_imgno.o hist_proc.o pick_p.o roi_draw.o save_file.o utils.o checkarg.o draw_image.o getparams.o img_lib.o pipe.o roi_mask.o save_roi.o view.o colormaps.o exchanges.o hdr_info.o import_img.o mk_anahdr.o readplane.o roi_proc.o sc_format.o copy_roi.o find_edge_loop.o hdr_save.o init_gpetview.o mk_seq.o roi_calc.o roi_profile.o -L/nix/store/05gqnvlirfffgdgl0fcxsjs7jv3l4nq5-gtk+-2.24.33/lib -L/nix/store/rl2xjjg5i12f4538qkvcgrq1w8a0klfz-glib-2.72.3/lib -L/nix/store/d01kn7w14kvqpw9vaa80b6gzj0rc60c9-cairo-1.16.0/lib -L/nix/store/zl0m5r1c6b8jd1ys43radywanlg24s6j-fontconfig-2.13.94-lib/lib -L/nix/store/6f5ks64qyhbl26i38g1nxlck1fqji2qi-freetype-2.12.0/lib -L/nix/store/cw6rpj2nzvf63lqw9mffvqrqv0hxl8y4-pango-1.50.7/lib -L/nix/store/wyvf3hvhcc6984jacr9r5yd9xiv7czky-harfbuzz-3.3.2/lib -L/nix/store/0xj21lbnq7bv1mlnvjizc4wihbs4g0v3-gdk-pixbuf-2.42.8/lib -L/nix/store/3syp0dxqzs98zymbm3lb5asrrk9az84x-atk-2.38.0/lib -lgtk-x11-2.0 -lgdk-x11-2.0 -lpangocairo-1.0 -latk-1.0 -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lpangoft2-1.0 -lpango-1.0 -lgobject-2.0 -lglib-2.0 -lharfbuzz -lfontconfig -lfreetype

Would this be caused by a missing -lm option to gcc?
If so, what is the recommended way of adding this in a Nix derivation?

For completeness, here’s a derivation that gets me this far:

{ stdenv ,
  lib,
  pkgs,
  fetchurl,
}:

stdenv.mkDerivation (finalAttrs: {
  pname = "gpetview";
  version = "3.5";

  src = fetchurl {
    url = "http://www.rim.cyric.tohoku.ac.jp/software/gpetview/gpetview-${finalAttrs.version}.tar.gz";
    sha256 = "sha256-UlsCivIZuBesqb5QZTkYFvYXXo5cIcoFTlpbwvLP8RU=";
  };

  buildInputs = with pkgs; [
    pkg-config
    gtk2
  ];
})

Adding

  NIX_LDFLAGS = "-lm";

seems to have got me past the immediate problem.

Your workaround looks very reasonable. Ideally upstream package should add -lm on it’s own.

1 Like