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

Tzung-May Fu cetmfu at polyu.edu.hk
Fri Jan 9 10:54:38 MST 2009


Thank you Mary!  That worked beautifully!

may

---- Original message ----
>Date: Fri, 09 Jan 2009 06:40:09 -0700
>From: "Mary Haley" <haley at ucar.edu>
>Subject: Re: [ncl-install] grib2c library not linking png and
jpeg libraries
>To: "Tzung-May Fu" <cetmfu at polyu.edu.hk>
>Cc: ncl-install at ucar.edu
>
>Hi May,
>
>I think this was a bug in the ymake system for NCL. You 
>need to link in the PNG library if you enable PNG support 
>for GRIB2.
>
>To fix this, look at the file $NCARG/config/Project for a 
>line that starts with "#define GRIB2lib".
>
>Change this line to be:
>
>#define  GRIB2lib  -lgrib2c -ljasper -lpng -lz
>
>To test if this fix works, type the following:
>
>    cd $NCARG/ni/src/ncl
>   make me
>   make all install
>
>If this works, then you can finish your NCL/NCAR Graphics 
>make with:
>
>   cd $NCARG
>   make all install >&! make-output-2
>
>I'm using "$NCARG" to represent the top directory of the 
>NCL/NCAR Graphics source tree.
>
>I'll add this to our troubleshooting guide.
>
>--Mary
>
>On Fri, 9 Jan 2009 11:11:05 +0800
>  "Tzung-May Fu" <cetmfu at polyu.edu.hk> wrote:
>> 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
>> 
>> 
>> 
>> _______________________________________________
>> ncl-install mailing list
>> List instructions, subscriber options, unsubscribe:
>> http://mailman.ucar.edu/mailman/listinfo/ncl-install
>
-----------------------
Tzung-May Fu
Assistant Professor
Department of Civil and Structural Engineering
The Hong Kong Polytechnic University
Tel: (+852) 2766 4489
Fax: (+852) 2334 6389
Email: May.Fu at polyu.edu.hk



More information about the ncl-install mailing list