我在基于 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
(注意:我从源代码编译了库,目录 /home/robin/Downloads/libpng-1.5.12 / 是我解压缩档案的地方。)
值得一提的是,我可以毫无困难地链接到共享库:
gcc test.c librimg.a -o test -std=c99 -lpng15 -lglfw -lGL -lGLU
我将不胜感激。
答案 0 :(得分:1)
我自己设法解决了这个问题。
我将所有 libpng15.a 和 libz.a 复制到我项目的目录中并将其解压缩。然后我将所有对象文件(包括我自己的文件)打包到一个库中(* .a )。这是有效的:)
答案 1 :(得分:0)
我在使用静态链接的libpng(版本1.5)创建qrencode可执行文件(FUKUCHI Kentaro libqrencode)时遇到了问题。我已经解决了,感谢你的帖子,我意识到我已经链接了libz。所以解决方案是添加动态libz。
这是我的命令行:
./configure --prefix=${TARGET_FOLDER} CFLAGS=-mmacosx-version-min=10.6 png_LIBS=/usr/local/Cellar/libpng/1.5.17/lib/libpng15.a LDFLAGS=/usr/lib/libz.dylib