【已解决】Makefile—warning: libxxx.so* needed by libxxx.so* not found (try using -rpath or -rpath-link)
继之前的博客解决交叉编译libpng、zlib和freetype遇到的问题后,执行应用程序的Makefile进行编译生成可执行程序。但在执行Makefile后没有编程成功,出现了warning警告信息:warning: libxxx.so* needed by libxxx.so* not found (try using -rpath or -rpath-link)
目录
项目场景:
近日正在做大四毕设项目——一个基于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")
更多推荐
所有评论(0)