热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Ubuntu下交叉编译gstreamer-0.10.24

最近要在arm平台上使用gstreamer,于是开始了gstreamer的交叉编译。实现交叉编译有两种方式:1.在pc平台编译,利用Ubuntu平台上的arm-linux-系列工具进行编译,此方式编译速度快,但是configure的交叉配置项设置很麻烦2.在目标平台编译,直接在目标板上用目标gcc工具进行编译,此方式编译速度慢,但是configure配置很简单,和pc机上的confi

最近要在arm平台上使用gstreamer,于是开始了gstreamer的交叉编译。实现交叉编译有两种方式:

1. 在pc平台编译,利用Ubuntu平台上的arm-linux-系列工具进行编译,此方式编译速度快,但是configure的交叉配置项设置很麻烦

2. 在目标平台编译,直接在目标板上用目标gcc工具进行编译,此方式编译速度慢,但是configure配置很简单,和pc机上的configure配置基本一样。

下面为pc平台的编译,还有错误

$GLIB_CFLAGS="-I/home/soeasy/nfsroot/target/usr/include/glib-2.0 -I/home/soeasy/nfsroot/target/usr/lib/glib-2.0/include" GLIB_LIBS="-L/home/soeasy/nfsroot/target/usr/lib/" XML_CFLAGS="-I/home/soeasy/nfsroot/target/usr/include/libxml2 "  GLIB_ONLY_CFLAGS=" -I/home/soeasy/nfsroot/target/usr/include/glib-2.0 -I/home/soeasy/nfsroot/target/usr/lib/glib-2.0/include  " ./configure --host=arm-linux --disable-nls --disable-static --disable-loadsave --with-html-dir=/tmp/dump --prefix=/home/soeasy/nfsroot/gstreamer/install LDFLAGS="-Wl,-rpath-link,/home/soeasy/nfsroot/target -lglib-2.0  -lgobject-2.0 -lgthread-2.0 -lgmodule-2.0 -lxml2 " CFLAGS="-I/home/soeasy/nfsroot/target/usr/include -I/home/soeasy/nfsroot/target/usr/include/glib-2.0 -I/home/soeasy/nfsroot/target/usr/lib/glib-2.0/include"

链接是提示下列错误:

arm-linux-gcc -shared  .libs/libgstreamer_0.10_la-glib-compat.o \

.libs/libgstreamer_0.10_la-gst.o .libs/libgstreamer_0.10_la-gstobject.o .libs/libgstreamer_0.10_la-gstbin.o \

.libs/libgstreamer_0.10_la-gstbuffer.o .libs/libgstreamer_0.10_la-gstbus.o .libs/libgstreamer_0.10_la-gstcaps.o \

.libs/libgstreamer_0.10_la-gstchildproxy.o .libs/libgstreamer_0.10_la-gstclock.o .libs/libgstreamer_0.10_la-gstelement.o \

.libs/libgstreamer_0.10_la-gstelementfactory.o .libs/libgstreamer_0.10_la-gsterror.o .libs/libgstreamer_0.10_la-gstevent.o \

.libs/libgstreamer_0.10_la-gstfilter.o .libs/libgstreamer_0.10_la-gstformat.o .libs/libgstreamer_0.10_la-gstghostpad.o \

.libs/libgstreamer_0.10_la-gstindex.o .libs/libgstreamer_0.10_la-gstindexfactory.o .libs/libgstreamer_0.10_la-gstinfo.o \

.libs/libgstreamer_0.10_la-gstinterface.o .libs/libgstreamer_0.10_la-gstiterator.o .libs/libgstreamer_0.10_la-gstmessage.o \

.libs/libgstreamer_0.10_la-gstminiobject.o .libs/libgstreamer_0.10_la-gstpad.o .libs/libgstreamer_0.10_la-gstpadtemplate.o \

.libs/libgstreamer_0.10_la-gstpipeline.o .libs/libgstreamer_0.10_la-gstplugin.o .libs/libgstreamer_0.10_la-gstpluginfeature.o \

.libs/libgstreamer_0.10_la-gstquery.o .libs/libgstreamer_0.10_la-gstregistry.o .libs/libgstreamer_0.10_la-gstsegment.o \

.libs/libgstreamer_0.10_la-gststructure.o .libs/libgstreamer_0.10_la-gstsystemclock.o .libs/libgstreamer_0.10_la-gsttaglist.o \

.libs/libgstreamer_0.10_la-gsttagsetter.o .libs/libgstreamer_0.10_la-gsttask.o .libs/libgstreamer_0.10_la-gsttrace.o \

.libs/libgstreamer_0.10_la-gsttypefind.o .libs/libgstreamer_0.10_la-gsttypefindfactory.o .libs/libgstreamer_0.10_la-gsturi.o \

.libs/libgstreamer_0.10_la-gstutils.o .libs/libgstreamer_0.10_la-gstvalue.o .libs/libgstreamer_0.10_la-gstparse.o \

.libs/libgstreamer_0.10_la-gstregistryxml.o .libs/libgstreamer_0.10_la-gstenumtypes.o .libs/libgstreamer_0.10_la-gstmarshal.o \

-Wl,--whole-archive parse/.libs/libgstparse.a -Wl,--no-whole-archive  -lm -lz -lpthread -ldl \

/usr/lib/libgobject-2.0.so /usr/lib/libgthread-2.0.so -lrt /usr/lib/libgmodule-2.0.so /usr/lib/libglib-2.0.so /usr/lib/libxml2.so  \

-Wl,-rpath-link -Wl,/home/soeasy/nfsroot/target -pthread -Wl,--export-dynamic -Wl,-soname -Wl,libgstreamer-0.10.so.0 \

-Wl,-version-script -Wl,.libs/libgstreamer-0.10.ver -o .libs/libgstreamer-0.10.so.0.7.0

/usr/lib/libgobject-2.0.so: could not read symbols: File in wrong format

显然需要链接的库libgobject-2.0.so没有定位到交叉库的目录,而是定位了pc机本身的i686的库,链接不成功。

根据gcc的参数说明,我在configure时指定了

LDFLAGS="-Wl,-rpath-link,/home/soeasy/nfsroot/target -lglib-2.0  -lgobject-2.0 -lgthread-2.0 -lgmodule-2.0 -lxml2 "

但是还是出错,郁闷

----------------------------------------------------------------------------------------------------------------------------------

继续交叉编译的工作,http://www.adbrite.cc/看来-Wl,-rpath-link,/home/soeasy/nfsroot/target是不能解决问题了,开始试试其他参数。

$LDFLAGS=" --sysroot=/home/soeasy/nfsroot/target -lglib-2.0 -lgobject-2.0 -lgthread-2.0 -lgmodule-2.0 -lxml2 " CPPFLAGS="-I/home/soeasy/nfsroot/target/usr/include -I/home/soeasy/nfsroot/target/usr/include/glib-2.0 -I/home/soeasy/nfsroot/target/usr/lib/glib-2.0/include -I/home/soeasy/nfsroot/target/usr/include/libxml2" GLIB_CFLAGS="-I/home/soeasy/nfsroot/target/usr/include/glib-2.0 -I/home/soeasy/nfsroot/target/usr/lib/glib-2.0/include" GLIB_LIBS="-L/home/soeasy/nfsroot/target/usr/lib --sysroot=/home/soeasy/nfsroot/target -lglib-2.0 -lgobject-2.0 -lgthread-2.0 -lgmodule-2.0 -lxml2" GLIB_ONLY_CFLAGS=" -I/home/soeasy/nfsroot/target/usr/include/glib-2.0 -I/home/soeasy/nfsroot/target/usr/lib/glib-2.0/include  " GLIB_ONLY_LIBS="-L/home/soeasy/nfsroot/target/usr/lib/ --sysroot=/home/soeasy/nfsroot/target -lglib-2.0 -lgobject-2.0 -lgthread-2.0 -lgmodule-2.0 -lxml2" ./configure --prefix=/install --disable-debug --disable-valgrind --host=arm-linux XML_CFLAGS="-I/home/soeasy/nfsroot/target/usr/include/libxml2"  GST_ALL_CFLAGS="-I/home/soeasy/nfsroot/target/usr/include -I/home/soeasy/nfsroot/target/usr/include/glib-2.0 -I/home/soeasy/nfsroot/target/usr/lib/glib-2.0/include -I/home/soeasy/nfsroot/target/usr/include/libxml2"

这次看来libgobject-2.0.so是链接成功了,但是又出现下列错误:

libtool: link:  arm-linux-gcc -shared  .libs/libgstreamer_0.10_la-gst.o .libs/libgstreamer_0.10_la-gstobject.o .libs/libgstreamer_0.10_la-gstbin.o .libs/libgstreamer_0.10_la-gstbuffer.o .libs/libgstreamer_0.10_la-gstbufferlist.o .libs/libgstreamer_0.10_la-gstbus.o .libs/libgstreamer_0.10_la-gstcaps.o .libs/libgstreamer_0.10_la-gstchildproxy.o .libs/libgstreamer_0.10_la-gstclock.o .libs/libgstreamer_0.10_la-gstdebugutils.o .libs/libgstreamer_0.10_la-gstelement.o .libs/libgstreamer_0.10_la-gstelementfactory.o .libs/libgstreamer_0.10_la-gsterror.o .libs/libgstreamer_0.10_la-gstevent.o .libs/libgstreamer_0.10_la-gstfilter.o .libs/libgstreamer_0.10_la-gstformat.o .libs/libgstreamer_0.10_la-gstghostpad.o .libs/libgstreamer_0.10_la-gstindex.o .libs/libgstreamer_0.10_la-gstindexfactory.o .libs/libgstreamer_0.10_la-gstinfo.o .libs/libgstreamer_0.10_la-gstinterface.o .libs/libgstreamer_0.10_la-gstiterator.o .libs/libgstreamer_0.10_la-gstmessage.o .libs/libgstreamer_0.10_la-gstminiobject.o .libs/libgstreamer_0.10_la-gstpad.o .libs/libgstreamer_0.10_la-gstpadtemplate.o .libs/libgstreamer_0.10_la-gstparamspecs.o .libs/libgstreamer_0.10_la-gstpipeline.o .libs/libgstreamer_0.10_la-gstplugin.o .libs/libgstreamer_0.10_la-gstpluginfeature.o .libs/libgstreamer_0.10_la-gstpoll.o .libs/libgstreamer_0.10_la-gstpreset.o .libs/libgstreamer_0.10_la-gstquark.o .libs/libgstreamer_0.10_la-gstquery.o .libs/libgstreamer_0.10_la-gstregistry.o .libs/libgstreamer_0.10_la-gstsegment.o .libs/libgstreamer_0.10_la-gststructure.o .libs/libgstreamer_0.10_la-gstsystemclock.o .libs/libgstreamer_0.10_la-gsttaglist.o .libs/libgstreamer_0.10_la-gsttagsetter.o .libs/libgstreamer_0.10_la-gsttask.o .libs/libgstreamer_0.10_la-gsttaskpool.o .libs/libgstreamer_0.10_la-gsttrace.o .libs/libgstreamer_0.10_la-gsttypefind.o .libs/libgstreamer_0.10_la-gsttypefindfactory.o .libs/libgstreamer_0.10_la-gsturi.o .libs/libgstreamer_0.10_la-gstutils.o .libs/libgstreamer_0.10_la-gstvalue.o .libs/libgstreamer_0.10_la-gstparse.o .libs/libgstreamer_0.10_la-gstregistrybinary.o .libs/libgstreamer_0.10_la-gstxml.o .libs/libgstreamer_0.10_la-gstenumtypes.o .libs/libgstreamer_0.10_la-gstmarshal.o  -Wl,--whole-archive parse/.libs/libgstparse.a -Wl,--no-whole-archive  -Wl,-rpath -Wl,/home/soeasy/nfsroot/target/usr/lib -Wl,-rpath -Wl,/home/soeasy/nfsroot/target/usr/lib -L/home/soeasy/nfsroot/target/usr/lib /home/soeasy/nfsroot/target/usr/lib/libgobject-2.0.so /home/soeasy/nfsroot/target/usr/lib/libgthread-2.0.so -lpthread -lrt /home/soeasy/nfsroot/target/usr/lib/libgmodule-2.0.so /home/soeasy/nfsroot/target/usr/lib/libglib-2.0.so /home/soeasy/nfsroot/target/usr/lib/libxml2.so -lm -lz -ldl    -Wl,-soname -Wl,libgstreamer-0.10.so.0 -Wl,-version-script -Wl,.libs/libgstreamer-0.10.ver -o .libs/libgstreamer-0.10.so.0.21.0

/opt/mv_pro_5.0/montavista/pro/devkit/arm/v5t_le/bin/../lib/gcc/armv5tl-montavista-linux-gnueabi/4.2.0/../../../../armv5tl-montavista-linux-gnueabi/bin/ld: skipping incompatible /lib/libpthread.so.0 when searching for /lib/libpthread.so.0

/opt/mv_pro_5.0/montavista/pro/devkit/arm/v5t_le/bin/../lib/gcc/armv5tl-montavista-linux-gnueabi/4.2.0/../../../../armv5tl-montavista-linux-gnueabi/bin/ld: cannot find /lib/libpthread.so.0

collect2: ld returned 1 exit status

看来又找到本机系统的库目录里去了。

仔细分析最后的链接命令,原来是用libtool工具来进行的。由于所有的Makefile文件是通过config.status产生的,想想link的命令肯定在

此文件里,于是编辑config.status,查找shared,看相关的脚本。搜索到下列:

archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'

archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~

cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~

echo "local: *; };" >> $output_objdir/$libname.ver~

$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'


推荐阅读
  • Ubuntu 9.04中安装谷歌Chromium浏览器及使用体验[图文]
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • Ubuntu安装常用软件详细步骤
    目录1.GoogleChrome浏览器2.搜狗拼音输入法3.Pycharm4.Clion5.其他软件1.GoogleChrome浏览器通过直接下载安装GoogleChro ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 本文介绍了在Ubuntu下制作deb安装包及离线安装包的方法,通过备份/var/cache/apt/archives文件夹中的安装包,并建立包列表及依赖信息文件,添加本地源,更新源列表,可以在没有网络的情况下更新系统。同时提供了命令示例和资源下载链接。 ... [详细]
  • REVERT权限切换的操作步骤和注意事项
    本文介绍了在SQL Server中进行REVERT权限切换的操作步骤和注意事项。首先登录到SQL Server,其中包括一个具有很小权限的普通用户和一个系统管理员角色中的成员。然后通过添加Windows登录到SQL Server,并将其添加到AdventureWorks数据库中的用户列表中。最后通过REVERT命令切换权限。在操作过程中需要注意的是,确保登录名和数据库名的正确性,并遵循安全措施,以防止权限泄露和数据损坏。 ... [详细]
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
  • 本文分析了Wince程序内存和存储内存的分布及作用。Wince内存包括系统内存、对象存储和程序内存,其中系统内存占用了一部分SDRAM,而剩下的30M为程序内存和存储内存。对象存储是嵌入式wince操作系统中的一个新概念,常用于消费电子设备中。此外,文章还介绍了主电源和后备电池在操作系统中的作用。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
author-avatar
mobiledu2502922357
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有