链接到LibPng库时出错

时间:2017-01-26 16:37:18

标签: linker symlink undefined-reference libpng

我无法链接到libpng库。 构建似乎无法定义对Libpng调用的引用。 我认为问题出在我的Libpng安装中。

我在Win7笔记本电脑上的Mingw环境中运行 我的构建环境如下:

My path starts with C:\MinGW\bin;C:\MinGW\msys\1.0\bin;C:\MinGW\git\cmd;C:\Program Files 


C:\Users\Bob\Home\png23d>g++ --version
g++ (GCC) 5.3.0

I have built and installed libpng-1.6.28 which creates the following:
C:\MinGW\bin>
    libpng-config
    libpng16-config
    libpng16.dll

C:\MinGW\include\libpng
    png.h
    pngconf.h
    pnglibconf.h

C:\MinGW\include\libpng16
    png.h
    pngconf.h
    pnglibconf.h

C:\MinGW\lib\pkgconfig

C:\MinGW\lib>
    libpng.a
    libpng.dll.a
    libpng16.a
    libpng16.dll.a

a symbolic link `libpng' to `libpng16'
a symbolic link `libpng.pc' to `libpng16.pc'
a symbolic link `libpng.a' to `libpng16.a'
a symbolic link `libpng-config' to `libpng16-config 

当我尝试构建程序“png23d”时,我得到以下内容

C:\Users\Bob\Home\png23d>make
g++ -DUSE_LIBPNG -lpng  png23d.o option.o bitmap.o mesh.o mesh_gen.o mesh_index.o mesh_simplify.o out_pgm.o out_rscad.o out_pscad.o out_stl.o   -o png23d

bitmap.o:bitmap.c:(.text+0x102): undefined reference to `png_sig_cmp'
bitmap.o:bitmap.c:(.text+0x142): undefined reference to `png_create_read_struct'
     .
     .
     .
bitmap.o:bitmap.c:(.text+0x418): undefined reference to `png_read_end'
bitmap.o:bitmap.c:(.text+0x466): undefined reference to `png_destroy_read_struct'
collect2.exe: error: ld returned 1 exit status
<builtin>: recipe for target 'png23d' failed
make: *** [png23d] Error 1

我几乎可以肯定它的-lpng无效....我只是不知道如何解决它。 我猜这是一个符号链接问题,我知道我没有在libpng构建期间创建一个。 如果我是对的,我需要将它链接到。

我尝试将-lpng更改为-llpng16。它没有任何区别。

感谢命令提示符正常工作。 只需弄清楚如何更改make文件。

#!/usr/bin/make
#
# png23d is a program to convert png images into 3d files
#
# Copyright 2011 Vincent Sanders <vince@kyllikki.org>
#
# Released under the MIT License, 
#   http://www.opensource.org/licenses/mit-license.php

CC = g++

VERSION=100

PREFIX = 

WARNFLAGS = -W -Wall -Wundef -Wpointer-arith \
        -Wcast-align -Wwrite-strings -Wstrict-prototypes \
        -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls \
        -Wnested-externs
ifneq ($(GCCVER),2)
  WARNFLAGS += -Wno-unused-parameter 
endif

OPTFLAGS=-O2
#OPTFLAGS=-O0

CFLAGS+=$(WARNFLAGS) -MMD -DVERSION=$(VERSION) $(OPTFLAGS) -g

LDFLAGS+= -DUSE_LIBPNG -lpng

PNG23D_OBJ=png23d.o option.o bitmap.o mesh.o mesh_gen.o mesh_index.o mesh_simplify.o out_pgm.o out_rscad.o out_pscad.o out_stl.o

.PHONY : all clean

all:png23d

png23d:$(PNG23D_OBJ)

-include $(PNG23D_OBJ:.o=.d)

-include test/Makefile.sub

clean: testclean
    ${RM} png23d $(PNG23D_OBJ) *.d *~ png23d.png

install:png23d
    install -D png23d $(DESTDIR)$(PREFIX)/bin

install-man:png23d.1
    install -D png23d.1 $(DESTDIR)$(PREFIX)/share/man/man1

# logo creation
png23d.png:png23d.pov
    povray +L/usr/share/povray/include/ -D +Q11 +O$@ +UV +UL +A0.2 +FP8 +W400 +H300 $<

1 个答案:

答案 0 :(得分:0)

-lpng移至目标文件之后。