求助:各位路过的大侠帮忙看看调用编译好的静态链接库libSDL2_ttf-2.0.12的问题,先谢过了!

游不离2010 2014-06-17 05:37:30
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]
...全文
407 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
游不离2010 2014-06-18
  • 打赏
  • 举报
回复
按照您的建议“可以将lSDL2_tty提到最前面”,然后交叉编译可以通过啦!非常感谢

您指出的

不好意思,本来应该是libSDL2_ttf.a,结果写错啦!

静之深 2014-06-17
  • 打赏
  • 举报
回复
1:用nm命令查看下库,看看是否有这个函数 2:LIBS+=... 后面库的名字对不上号啊 libSDL2_tty.a=>lSDL2_ttf 3:LIBS+=... 将这几个库的链接顺序交换下,可以将lSDL2_tty提到最前面 我以前碰到的问题就是顺序的问题(不同链接器处理方式是有区别的)

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧