当前位置: 技术问答>linux和unix
编译相同代码,gcc和mipsel-linux-gnu-gcc生成的app不同,求高手帮忙解决
来源: 互联网 发布时间:2016-09-11
本文导语: 我的代码是实现往Linux系统的framebuffer中写入一张JPG格式的图片数据;代码分为:main.c fb_init.c jpeg.c disp_jpeg.c四块;但是在虚拟机上用gcc编译后,生成可执行文件app,然后查看它的链接库ldd app: linux-gate.so.1 => (0xf...
我的代码是实现往Linux系统的framebuffer中写入一张JPG格式的图片数据;代码分为:main.c fb_init.c jpeg.c disp_jpeg.c四块;但是在虚拟机上用gcc编译后,生成可执行文件app,然后查看它的链接库ldd app:
linux-gate.so.1 => (0xffffe000)
libjpeg.so.8 => ../jpeg-8/.libs/libjpeg.so.8 (0xb772f000)
libc.so.6 => /lib/libc.so.6 (0xb75bc000)
/lib/ld-linux.so.2 (0xb7766000)
但是用交叉编译工具mipsel-linux-gnu-gcc编译到MIPS开发板上,生成的app的链接库是:
libjpeg.so.62 => /lib/libjpeg.so.62 (0x2aad8000)
libc.so.6 => /lib/libc.so.6 (0x2ab0a000)
/lib/ld.so.1 (0x2aaa8000)
结果是:在虚拟机上的代码可以在屏幕显示图片,而开发板上的代码用HDMI线连接屏幕后不能显示图片。
我已经把该代码用到的库目录jpeg-8用gcc和mipsel-linux-gnu-gcc编译了两种格式,生成的app还是不能拥有相同的库。
是不是和编译生成的库安装路径有关系,像这种情况应该安装到什么路径下?
下面是我的给代码文件制作的makefile:
src = $(wildcard *.c)
obj = $(patsubst %.c, %.o, $(src))
target = app
CC= mipsel-linux-gnu-gcc
#CC= gcc (编译到虚拟机上时用)
CFLAGS = -Wall -c -I../jpeg-8/
LDFLAGS = -Wall -g -L../jpeg-8/.libs -ljpeg
$(target) : $(obj)
$(CC) -o $@ $^ $(LDFLAGS)
%.o:%.c
$(CC) $(CFLAGS) -o $@ $
linux-gate.so.1 => (0xffffe000)
libjpeg.so.8 => ../jpeg-8/.libs/libjpeg.so.8 (0xb772f000)
libc.so.6 => /lib/libc.so.6 (0xb75bc000)
/lib/ld-linux.so.2 (0xb7766000)
但是用交叉编译工具mipsel-linux-gnu-gcc编译到MIPS开发板上,生成的app的链接库是:
libjpeg.so.62 => /lib/libjpeg.so.62 (0x2aad8000)
libc.so.6 => /lib/libc.so.6 (0x2ab0a000)
/lib/ld.so.1 (0x2aaa8000)
结果是:在虚拟机上的代码可以在屏幕显示图片,而开发板上的代码用HDMI线连接屏幕后不能显示图片。
我已经把该代码用到的库目录jpeg-8用gcc和mipsel-linux-gnu-gcc编译了两种格式,生成的app还是不能拥有相同的库。
是不是和编译生成的库安装路径有关系,像这种情况应该安装到什么路径下?
下面是我的给代码文件制作的makefile:
src = $(wildcard *.c)
obj = $(patsubst %.c, %.o, $(src))
target = app
CC= mipsel-linux-gnu-gcc
#CC= gcc (编译到虚拟机上时用)
CFLAGS = -Wall -c -I../jpeg-8/
LDFLAGS = -Wall -g -L../jpeg-8/.libs -ljpeg
$(target) : $(obj)
$(CC) -o $@ $^ $(LDFLAGS)
%.o:%.c
$(CC) $(CFLAGS) -o $@ $