当前位置: 技术问答>linux和unix
求助:各位路过的大侠帮忙看看调用编译好的静态链接库libSDL2_ttf-2.0.12的问题,先谢过了!
来源: 互联网 发布时间:2017-05-20
本文导语: LINUX环境:虚拟机安装unbuntu10.04 交叉编译环境:ARM-LINUX-GCC-4.5.1 最近,在unbuntu上交叉编译开源代码libSDL2-2.0.3、libSDL2_tty-2.0.12、libfreetype-2.4.4,出现下图问题: 具体操作步骤: 一、交叉编译源代码为静态链接库 1、交...
LINUX环境:虚拟机安装unbuntu10.04 交叉编译环境:ARM-LINUX-GCC-4.5.1
最近,在unbuntu上交叉编译开源代码libSDL2-2.0.3、libSDL2_tty-2.0.12、libfreetype-2.4.4,出现下图问题:
具体操作步骤:
一、交叉编译源代码为静态链接库
1、交叉编译libfreetype-2.4.4
1)./configure --host=arm-linux --prefix=/usr/local/cross_compile/libfreetype-2.4.4
2)make
3)make install
2、交叉编译libSDL2-2.0.3
1)./configure --prefix=/usr/local/cross_compile/libsdl2-2.0.3 --host=arm-linux --with-gnu-ld --disable-video-x11
2)make
3)make install
3、交叉编译libSDL2_tty-2.0.12
交叉编译这个静态链接库时,依赖libfreetype.a、libSDL2.a,具体见下面configure
1)./configure --prefix=/usr/local/cross_compile/libsdl2_ttf-2.0.12 --host=arm-linux --with-sdl-prefix=/usr/local/cross_compile/libsdl2-2.0.3 --with-freetype-prefix=/usr/local/cross_compile/libfreetype-2.4.4 CFLAGS="-
I/usr/local/cross_compile/libsdl2-2.0.3/include -I/usr/local/cross_compile/libfreetype-2.4.4/include" LIBS="-L/usr/local/cross_compile/libsdl2-2.0.3/lib -lSDL2 -L/usr/local/cross_compile/libfreetype-2.4.4/lib -lfreetype" LDFLAGS=-
L/usr/local/cross_compile/libfreetype-2.4.4/lib
2)make
3)make install
二、在ubuntu下的QT中交叉编译测试代码(该测试代码中调用libfreetype.a、libSDL2.a、libSDL2_tty.a),QT工程截图:
就会出现:
显然是libSDL2_tty.a中的函数调用libfreetype.a里面的函数时,找不到libfreetype.a里面的函数的实现,搞了两天已经没有头绪啦!
但是,我将三个开源代码进行非交叉编译(configure 中不加--host=arm-linux)生成的静态库名称不变,然后在QT下非交叉编译测试代码(该测试代码中调用libfreetype.a、libSDL2.a、libSDL2_tty.a),就可以编译成功,生成的测试程序在QT下 也可以正常运行。[/b]
最近,在unbuntu上交叉编译开源代码libSDL2-2.0.3、libSDL2_tty-2.0.12、libfreetype-2.4.4,出现下图问题:
具体操作步骤:
一、交叉编译源代码为静态链接库
1、交叉编译libfreetype-2.4.4
1)./configure --host=arm-linux --prefix=/usr/local/cross_compile/libfreetype-2.4.4
2)make
3)make install
2、交叉编译libSDL2-2.0.3
1)./configure --prefix=/usr/local/cross_compile/libsdl2-2.0.3 --host=arm-linux --with-gnu-ld --disable-video-x11
2)make
3)make install
3、交叉编译libSDL2_tty-2.0.12
交叉编译这个静态链接库时,依赖libfreetype.a、libSDL2.a,具体见下面configure
1)./configure --prefix=/usr/local/cross_compile/libsdl2_ttf-2.0.12 --host=arm-linux --with-sdl-prefix=/usr/local/cross_compile/libsdl2-2.0.3 --with-freetype-prefix=/usr/local/cross_compile/libfreetype-2.4.4 CFLAGS="-
I/usr/local/cross_compile/libsdl2-2.0.3/include -I/usr/local/cross_compile/libfreetype-2.4.4/include" LIBS="-L/usr/local/cross_compile/libsdl2-2.0.3/lib -lSDL2 -L/usr/local/cross_compile/libfreetype-2.4.4/lib -lfreetype" LDFLAGS=-
L/usr/local/cross_compile/libfreetype-2.4.4/lib
2)make
3)make install
二、在ubuntu下的QT中交叉编译测试代码(该测试代码中调用libfreetype.a、libSDL2.a、libSDL2_tty.a),QT工程截图:
就会出现:
显然是libSDL2_tty.a中的函数调用libfreetype.a里面的函数时,找不到libfreetype.a里面的函数的实现,搞了两天已经没有头绪啦!
但是,我将三个开源代码进行非交叉编译(configure 中不加--host=arm-linux)生成的静态库名称不变,然后在QT下非交叉编译测试代码(该测试代码中调用libfreetype.a、libSDL2.a、libSDL2_tty.a),就可以编译成功,生成的测试程序在QT下 也可以正常运行。[/b]
|
1:用nm命令查看下库,看看是否有这个函数
2:LIBS+=...
后面库的名字对不上号啊 libSDL2_tty.a=>lSDL2_ttf
3:LIBS+=...
将这几个库的链接顺序交换下,可以将lSDL2_tty提到最前面
我以前碰到的问题就是顺序的问题(不同链接器处理方式是有区别的)
2:LIBS+=...
后面库的名字对不上号啊 libSDL2_tty.a=>lSDL2_ttf
3:LIBS+=...
将这几个库的链接顺序交换下,可以将lSDL2_tty提到最前面
我以前碰到的问题就是顺序的问题(不同链接器处理方式是有区别的)