[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