[ncl-install] grib2c library not linking png and jpeg libraries

Tzung-May Fu cetmfu at polyu.edu.hk
Thu Jan 8 20:11:05 MST 2009


Hi all -

I'm trying to build NCL with GRIB2 support.  The OS is Ubuntu linux, and I 
am using Intel C and Fortran compilers.

During 'make Everything' for NCL, here's the error message I got:

        /home/tmfu/testlib/lib/libgrib2c.a(dec_png.o): In function 
`dec_png':
        dec_png.c:(.text+0x99): undefined reference to 
`png_create_read_struct'
        dec_png.c:(.text+0x11f): undefined reference to `png_set_read_fn'
        dec_png.c:(.text+0x136): undefined reference to `png_read_png'
        dec_png.c:(.text+0x149): undefined reference to `png_get_rows'
        dec_png.c:(.text+0x18a): undefined reference to `png_get_IHDR'
        dec_png.c:(.text+0x319): undefined reference to 
`png_destroy_read_struct'
        dec_png.c:(.text+0x36a): undefined reference to 
`png_destroy_read_struct'
        dec_png.c:(.text+0x39d): undefined reference to 
`png_destroy_read_struct'
        dec_png.c:(.text+0x3cb): undefined reference to 
`png_destroy_read_struct'
        make[4]: *** [ncl] Error 1

So I read Rick's reply on this thread:
http://www.ncl.ucar.edu/Support/install_archives/2008/0119.html

And I checked my libgrib2c.a compilation.  Here's the strange part.  My 
makefile seems correct:

        DEFS=-DUSE_JPEG2000 -DUSE_PNG
        INC=-I/home/tmfu/testlib/include
        LDFLAGS=-L/home/tmfu/testlib/lib
        LIBS=-ljpeg -lpng
        #CFLAGS= $(INC) $(DEFS)   # <----- I also trited this
        CFLAGS= $(INC) $(DEFS) $(LDFLAGS) $(LIBS)

        CC=icc
        LIB=libgrib2c.a
        ARFLAGS=

But the resulting 'libgrib2c.a' is somehow not linking PNG and JPEG 
libraries correctly.  I did an 'nm' on 'libgrib2c.a':

        nm libgrib2c.a | grep png

Here's what I got:
                         U pngunpack
        pngpack.o:
                         U enc_png
        0000000000000000 T pngpack
        pngunpack.o:
                     U dec_png
        0000000000000000 T pngunpack
        dec_png.o:
        0000000000000030 T dec_png
                         U png_create_info_struct
                         U png_create_read_struct
                         U png_destroy_read_struct
                         U png_get_IHDR
                         U png_get_io_ptr
                         U png_get_rows
                         U png_read_png
                         U png_set_read_fn
                         U png_sig_cmp
        enc_png.o:
        0000000000000040 T enc_png
                         U png_create_info_struct
                         U png_create_write_struct
                         U png_destroy_write_struct
                         U png_get_io_ptr
                         U png_set_IHDR
                         U png_set_rows
                         U png_set_write_fn
                         U png_write_png
                         U pngpack

So it seems that these functions are really NOT defined in 'libgrib2c.a'.  I 
did check to see the same functions are defined in 'libpng.a'.

The only clue I can find is during 'make all' for grib2c libraries, the 
following warning message appeared:

        icc -c -I/home/tmfu/testlib/include -DUSE_JPEG2000 -DUSE_PNG -L/home/tmfu/testlib/lib 
 -ljpeg -lpng  pngunpack.c
        pngunpack.c(63): warning #167: argument of type "unsigned char *" is 
incompatible with parameter of type "char *"
                   iret=(g2int)dec_png(cpack,&width,&height,ctemp);
                                                        ^
        pngunpack.c(72): (col. 10) remark: LOOP WAS VECTORIZED.

The same problem exists with the JPEG libraries in 'libgrib2c.a'.  I've 
tried using gcc instead of icc, different ways of linking the libraries, and 
even copying all JPEG and PNG libraries and include files to the grib2c code 
directory.  Same result every time.

If anybody have any suggestion, I would very much appreciate it!   Thanks in 
advance.

Regards,
May Fu





More information about the ncl-install mailing list