我在基于libpng(1.5版本)开发自己的应用程序时遇到了一个问题。
长话短说,我需要静态链接这个库,但我不断得到'未定义的引用'错误。我尝试提取libpng15.a并将其内容添加到我的库中,还尝试使用gcc命令进行链接。
我的gcc命令:
gcc test.c librimg.a libz.a libpng15.a -o test -std=c99 -lglfw -lGL -lGLU
我得到的错误:

libpng15.a(libpng15_la-png.o): In function `png_reset_crc':
/home/robin/Downloads/libpng-1.5.12/png.c:111: undefined reference to `crc32'
libpng15.a(libpng15_la-png.o): In function `png_calculate_crc':
/home/robin/Downloads/libpng-1.5.12/png.c:152: undefined reference to `crc32'
libpng15.a(libpng15_la-png.o): In function `png_reset_zstream':
/home/robin/Downloads/libpng-1.5.12/png.c:757: undefined reference to `inflateReset'
libpng15.a(libpng15_la-pngread.o): In function `png_create_read_struct_2':
/home/robin/Downloads/libpng-1.5.12/pngread.c:119: undefined reference to `inflateInit_'
libpng15.a(libpng15_la-pngread.o): In function `png_read_row':
/home/robin/Downloads/libpng-1.5.12/pngread.c:557: undefined reference to `inflate'
libpng15.a(libpng15_la-pngread.o): In function `png_read_destroy':
/home/robin/Downloads/libpng-1.5.12/pngread.c:1070: undefined reference to `inflateEnd'
libpng15.a(libpng15_la-pngrutil.o): In function `png_inflate':
/home/robin/Downloads/libpng-1.5.12/pngrutil.c:333: undefined reference to `inflate'
/home/robin/Downloads/libpng-1.5.12/pngrutil.c:362: undefined reference to `inflateReset'
libpng15.a(libpng15_la-pngrutil.o): In function `png_read_finish_row':
/home/robin/Downloads/libpng-1.5.12/pngrutil.c:3848: undefined reference to `inflate'
/home/robin/Downloads/libpng-1.5.12/pngrutil.c:3880: undefined reference to `inflateReset'
collect2: ld returned 1 exit status

(注意:我已经从source和目录/home/robin/downloads/libpng-1.5.12/编译了library,这里是我提取归档文件的地方。)
值得一提的是,我可以毫无困难地链接到共享库:
gcc test.c librimg.a -o test -std=c99 -lpng15 -lglfw -lGL -lGLU
我很感激你的帮助。

最佳答案

我自己设法解决了这个问题。
我将所有libpng15.a和libz.a复制到我的项目目录中,并将它们提取出来。然后我将所有对象文件(包括我自己的)打包到一个库中。正在工作:)

10-07 15:39