目录

项目场景:

问题描述和原因分析

解决方案:


项目场景:

        近日正在做大四毕设项目——一个基于IMX6ULL的多媒体播放器,这个项目需要安装一些第三方库,如libpng用于显示png图片,zlib用于数据解压缩,freetype作为软件字体引擎库,同时freetype库交叉编译安装时需要依赖libpng库和zlib库


问题描述和原因分析

        继之前的博客解决交叉编译libpng、zlib和freetype遇到的问题后,执行应用程序的Makefile进行编译生成可执行程序。

        但在执行Makefile后没有编程成功,出现了warning警告信息:

warning: libxxx.so* needed by libxxx.so* not found (try using -rpath or -rpath-link)

/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/4.9.4/../../../../arm-linux-gnueabihf/bin/ld: warning: libpng16.so.16, needed by /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/../arm-linux-gnueabihf/libc/usr/lib/libfreetype.so, not found (try using -rpath or -rpath-link)

/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/4.9.4/../../../../arm-linux-gnueabihf/bin/ld: warning: libz.so.1, needed by /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/../arm-linux-gnueabihf/libc/usr/lib/libfreetype.so, not found (try using -rpath or -rpath-link)
/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/../arm-linux-gnueabihf/libc/usr/lib/libfreetype.so:

/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/../arm-linux-gnueabihf/libc/usr/lib/libfreetype.so: undefined reference to `inflateReset'
/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/../arm-linux-gnueabihf/libc/usr/lib/libfreetype.so: undefined reference to `png_read_end@PNG16_0'

意思就是前面的这个libxxx.so*找不到,那么就可能存在两个原因:

(1)Makefile文件中库文件路径缺少-lxxx

(2)libxxx.so*库文件没有放在编译工具链存放库文件的目录中

解决方案:

(1)Makefile文件中库文件路径缺少-lxxx

        在Makefile 的 LDFLAGS := 添加上-lpng,编译器在编译时会去系统目录中寻找libpng的库文件

LDFLAGS := -lm -lfreetype -lts -lpthread -ljpeg -lmad -lasound -lpng  

(2)libxxx.so*库文件没有放在编译工具链存放库文件的目录中

        进入到相应库的库文件目录中,将.so动态库链接文件拷贝到/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/lib/这个目录中去,即工具链的库文件目录

cp -d *so* /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/lib/

        最终Makefile如下:

CROSS_COMPILE=arm-linux-gnueabihf-

AS     = $(CROSS_COMPILE)as
LD     = $(CROSS_COMPILE)ld
CC     = $(CROSS_COMPILE)gcc
NM     = $(CROSS_COMPILE)nm
#CPP    = $(CROSS_COMPILE)cpp

OBJDUMP = $(CROSS_COMPILE)objdump
OBJCOPY = $(CROSS_COMPILE)objcopy
STRIP    = $(CROSS_COMPILE)strip

#export 向下传导
export AS LD CC NM
export OBJDUMP OBJCOPY STRIP

CFLAGS := -Wall -O2 -g
CFLAGS += -I $(shell pwd)/include
CFLAGS += -I /home/aming/linux/tool/freetype/include/freetype2
CFLAGS += -I $(shell pwd)/include/system
CFLAGS += -I /home/aming/linux/tool/tslib/include 
CFLAGS += -I /home/aming/linux/tool/jpeg/include/
CFLAGS += -I /usr/local/include
CFLAGS += -I /home/aming/linux/tool/libmad/include
#CFLAGS += -L /usr/lib/x86_64-linux-gnu
#CFLAGS += -I /usr/include/
#CFLAGS += -I /usr/include/x86_64-linux-gnu
#CFLAGS += -I /work/tools/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include

LDFLAGS := -lm -lfreetype -lts -lpthread -ljpeg -lmad -lasound -lpng  

export CFLAGS LDFLAGS

TOP_DIR := $(shell pwd)
export TOP_DIR

TARGET := test

obj-y += main.o
obj-y += display/
obj-y += encoding/
obj-y += font/
obj-y += system/
obj-y += draw/
obj-y += input/
obj-y += netprint/
obj-y += render/
obj-y += file/
obj-y += page/
obj-y += music/

all :
    @ make -C ./ -f $(TOP_DIR)/Makefile.build
    @ echo "CC test"
    @ $(CC) $(LDFLAGS) -o $(TARGET) built-in.o

clean :
    rm -rf $(shell find -name "*.o")

distclean :
    rm -rf $(shell find -name "*.o.d")
    rm -rf $(shell find -name "*.o")
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐