交叉编译qt 4.7.0 加入dbus选项的错误
- 格式:doc
- 大小:12.46 KB
- 文档页数:2
交叉编译几种常见的报错由于是第一次交叉编译,不知道会出现什么问题,思路就是先把gcc和ld都改成arm的,然后遇到什么问题在解决什么问题,以下过程都是在这个思路下进行。
1.指定arm的编译器和连接器:只是把gcc改为arm-none-linux-gnueabi-gcc,ld改为arm-none-linux-gnueabi-ld,其他的都没有修改。
出现以下错误:arm-none-linux-gnueabi-ld: warning: library search path "/usr/local/lib" is unsafe forcross-compilationarm-none-linux-gnueabi-ld: skipping incompatible /usr/local/lib/libfreetype.so when searchingfor -lfreetypearm-none-linux-gnueabi-ld: skipping incompatible /usr/local/lib/libfreetype.a when searchingfor -lfreetypearm-none-linux-gnueabi-ld: cannot find -lfreetype分析原因是:链接的这些库文件都是在PC编译器下编译出来的,现在把它们和用arm-none-linux-gnueabi-gcc编译出来的文件做链接,当然会出错。
解决方法:这些库重新用arm-gcc重新编译生成相应的库。
下面使用是重新编译库文件的过程:重新编译freetype根据交叉编译的文档,我创建了一个文件夹/usr/local/arm-linux来存放编译后的库文件。
执行:./configure –host=arm-none-linux-gnueabi –prefix=/usr/local/arm-linux注意:host的参数应该是交叉编译环境的前缀。
交叉编译Qt程序1. 什么是交叉编译?交叉编译是指在一台计算机上生成在另一种体系结构的计算机上运行的可执行文件。
在本文中,我们将讨论如何在一台计算机上交叉编译Qt程序,以在另一种体系结构的计算机上运行。
2. 为什么要交叉编译Qt程序?通常情况下,我们在开发Qt程序时会在本地计算机上进行编译和测试。
但是,有时我们需要将程序部署到另一种体系结构的计算机上,比如嵌入式设备、移动设备或者远程服务器。
这时,我们就需要使用交叉编译来生成适用于目标体系结构的可执行文件。
交叉编译Qt程序的好处有: - 提高编译速度:由于交叉编译是在本地计算机上进行,可以充分利用计算机的资源,从而加快编译速度。
- 适用于嵌入式设备:嵌入式设备通常资源有限,无法直接在设备上编译Qt程序。
通过交叉编译,可以将程序编译为能够在嵌入式设备上运行的可执行文件。
- 便于集成和部署:交叉编译生成的可执行文件可以直接部署到目标设备上,减少了在目标设备上进行编译的复杂性。
3. 准备工作在进行交叉编译之前,我们需要进行一些准备工作。
3.1 安装交叉编译工具链首先,我们需要安装目标体系结构的交叉编译工具链。
交叉编译工具链是一组编译器、链接器和其他工具,用于将代码编译为目标体系结构的可执行文件。
具体的安装方法可以参考交叉编译工具链的文档或者官方网站。
常见的交叉编译工具链有: - GCC交叉编译工具链:用于编译C/C++程序。
- Binutils交叉编译工具链:用于链接和调试可执行文件。
- Qt交叉编译工具链:用于编译Qt程序。
3.2 下载和配置Qt源码接下来,我们需要下载和配置Qt源码。
Qt是一个跨平台的应用程序开发框架,支持多种体系结构和操作系统。
你可以从Qt官方网站下载最新的Qt源码包。
下载完毕后,解压源码包到本地目录。
在解压后的源码目录中,运行以下命令进行配置:./configure -xplatform <platform> -device <device> -sysroot <sysroot> -prefix <prefix>其中,<platform>是目标体系结构的平台标识,比如linux-arm-gnueabi-g++;<device>是目标设备标识,比如generic-linux-g++;<sysroot>是目标设备的根文件系统路径;<prefix>是Qt安装路径。
 一个顽疾——QT不能包含tslib的头和库文件联合编译的解决方法先介绍一下我的交叉编译环境,OS是Fedora9,交叉编译器是arm-linux-gcc-4.3.3(arm-2009q1),其它,tslib-1.4、QT4.7.2,硬件平台Omap3530。
以前我的交叉编译器使用的是arm-linux-gcc-4.3.2,联合编译QT4.7.2和tslib-1.4没有任何问题。
现在,我换成了arm-linux-gcc-4.3.3,再次联合编译时,就出现问题了。
过程如下:1、安装tslib-1.4 。
2、下载QT,我当时下载的版本是qt-everywhere-opensource-src-4.7.2.tar.gz 。
3、执行以下命令执行QT4.7.2编译前的配置:# tar -zxvfqt-everywhere-opensource-src-4.7.2.tar.gz# cd qt-everywhere-opensource-src-4.7.2# echo yes | ./configure -prefix /opt/Qt4.7-opensource -embedded arm -no-qt3support -xplatformqws/linux-arm-g++ -no-webkit -qt-libtiff -qt-libmng-qt-mouse-pc -no-mouse-linuxtp -qt-mouse-tslib -I/usr/local/tslib/include -L /usr/local/tslib/lib-no-neon上面的主要参数含义说明如下:-prefix /opt/Qt4.7 :表示Qt4.7最终的安装路径是/opt/Qt4.7。
注意,将QT部署到目标板上时,也需要把Qt4.7放在这个路径上;-embedded arm :表示将编译针对arm平台的embedded版本;-xplatform qws/linux-arm-g++ :表示使用arm-linux交叉编译器进行编译;-qt-mouse-tslib :表示将使用tslib来驱动触摸屏-I /usr/local/tslib/include-L /usr/local/tslib/lib :包含tslib的头文件和库文件这时,问题出现了。
[转]qt-4.7交叉编译-mikit的专栏-CSDN博客[转]qt-4.7交叉编译收藏一:环境介绍虚拟机:vmware 7.0Linux 环境:ubuntu 9.04交叉编译环境:arm-linux-g++ 3.4.5硬件平台:TQ2440二:移植步骤安装交叉编译环境由于这里使用的是QT2440管盘中提供的交叉编译工具链EABI-4.3.3_EmbedSky_20100610.tar.bz2,放在/opt/目录下解压主要是在解压后可以看到其中含有两个版本,由于qt4.7.0的编译必须使用3.4.5版本所以在设置交叉编译的路径的时候使用的是在/etc/profile中加入exportPATH=/opt/EmbedSky/crosstools_3.4.5_softfloat/gcc-3.4.5-glibc-2.3.6/arm-linux/bin:$PATH安装tslib1.41. 下载tslib1.4,解压2. 进入解压的目录运行执行./autogen.sh3. 执行./configure --prefix=/opt/tslib/ --host=arm-linux ac_cv_func_malloc_0_nonnull=yes ,经过一段时间的编译4. 执行make install5. 修改/opt/tslib/etc/ts.conf,把第二行的#号去掉(这样做的主要目的是为了在移植到板子上的时候,可以制定输入模块)6. 在/etc/profile中加入export PATH=/opt/tslib:$PATHPS:经过我的测试,我无法用以上的方法编译tslib1.4,我用的是另外一种方法:1、 ./autogen.sh #用于生成configure脚本2、 echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache#产生一个cache文件arm-linux.cache,欺骗configure,3、 CC=arm-linux-gcc ./configure --host=arm-linux --prefix=/opt/tslib --cache-file=arm-linux.cache4、 make5、 make install交叉成功后在目标位置产生/bin、/etc、/include、/lib 4个文件夹编译qt4.7.0-arm1. 下载qt-everwhere-opensource-4.7.0,并解压最好重命名qt-everwhere-opensource-4.7.0-qte2. 开始进行配置选项./configure -embedded arm -release -opensource -fast -no-accessibility -no-scripttools -no-mmx -no-multimedia -no-svg -no-3dnow -no-sse -no-sse2 -silent -qt-libpng -qt-libjpeg -no-libmng -no-libtiff -no-multimedia -make libs -nomake tools -nomake examples -nomake docs -nomake demo -no-nis -no-cups -no-iconv -no-dbus -no-openssl -xplatform qws/linux-arm-g++ -little-endian -qt-freetype -depths 16,18 -qt-gfx-linuxfb -no-gfx-transformed -no-gfx-multiscreen -no-gfx-vnc -no-gfx-qvfb -qt-kbd-linuxinput -no-glib -qt-mouse-tslib -I /opt/tslib/include -L /opt/tslib/lib -confirm-license "$@"3. 开始进行交叉编译gmake 此过程要经历很长的一段时间4. 在交叉编译成功后运行gmake install安装,这里会默认安装到/usr/local/Trolltech/QtEmbedded-4.7.0-arm5. 这个时候qte的编译就成功了制作根文件系统(移植到开发板)1.移植tslib,将ubuntu中的/opt/tslib 拷贝到根文件系统中的/opt/下面2.移植qte4.7.0将/usr/local/Trolltech/QtEmbedded-4.7.0-arm下面的lib文件夹拷贝到根文件中的相同目录下(必需得先创建相应的目录)注:此时可以根据需要裁剪lib 中的内容去掉不用的.so文件3. 增加新的显示中文的字体wenquanyi 放到上面的/lib/fonts目录下。
Qt4.7.1交叉编译环境配置1.编译tslib (2)2.编译Qt4.7.1 (3)3Qt creator的安装 (5)Qt4.7.1交叉编译环境配置PC环境:Ubuntu12.04开发板:OK210交叉编译器:arm-2009q3(即4.4.1)1.编译tslibtslib库,是触摸屏校准时需要的库文件,如对触摸屏的数据进行过滤、去抖动等,QT的库会调用tslib的库文件.编译tslib库1.1将tslib.tar.gz,拷到Ubuntu下,解压tar xzvf tslib.tar.gz;1.2安装autoconf、automake、libtool包在Ubuntu命令行中分别执行以下三个升级命令。
#sudo apt-get install autoconf#sudo apt-get install automake#sudo apt-get install libtool#sudo apt-get insintall g++1.3进入tslib目录:cd tslib;设置环境变量#export PATH=/usr/local/arm/arm-2009q3/bin:$PATH#export TOOLCHAIN=/usr/local/arm/arm-2009q3#export TB_CC_PREFIX=arm-linux-#export PKG_CONFIG_PREFIX=$TOOLCHAIN/arm-linux1.4在tslib目录下运行脚本./autogen.sh1.5用configure生成Makefile.echo"ac_cv_func_malloc_0_nonnull=yes">arm-linux.cache #./configure--host=arm-linux--cache-file=arm-linux.cache--enable-inputapi=noPLUGIN_DIR=/usr/local/arm/tslib/plugins-prefix=/usr/local/arm/tslib-host=arm-linux--cache-file=arm-linux.cache2>&1|tee conf_log1.6编译安装make2>&|tee make_log1.7make install1.8编译完成后检查主机目录‘/usr/local/arm/’下面是否已经有了‘tslib’文件夹,如果有的话,请修改etc文件夹下的‘ts.conf’,去掉“#module_raw input”中的#号和空格,如下图所示。
linux +qt4.7+opencv2.2移植到tq2440开发板以下操作在Fedora下使用超级用户进行我已经安装了交叉编译器arm-linux-gcc 4.3.3和qt4.5的x86和arm版本在目录/opt/EmbedSky下。
修改配置文件/etc/profile 添加pathmunge /opt/EmbedSky/4.3.3/bin安装CMakeOpenCV 2.1的版本,必须使用CMake创建Makefile。
我使用的CMake版本是2.6-Linux-i386的,是fedora 通过软件添加和载卸功能添加的(这个cmake要重新安装,而且要添加bin进去路径)编译OpenCV:1、解压OpenCV 2.1到/opt/EmbedSky/OpenCV-2.1.0目录下2、在超级用户下,运行cmake-gui命令选择源代码目录:/opt/EmbedSky/OpenCV-2.1.0选择Build目录:/home/pww71/opencv-arm/点击Configure,保持generator为Unix Makefiles,选择Specify options for cross-compiling,点击Next Operating System填写arm-inuxC Compilers选择/opt/EmbedSky/4.3.3/bin/arm-linux-gccC++ Compilers选择/opt/EmbedSky/4.3.3/bin/arm-linux-g++程序库的Target Root填写/opt/EmbedSky/4.3.3/,然后点击Finish修改默认配置,X86-opencv的cmake配置添加BUILD_EXAMPLES 和OPENCV_BUILD_3RDPARTY_LIBS 前面的日志已经介绍过了arm-opencv的cmake配置不要加BUILD_EXAMPLES 和OPENCV_BUILD_3RDPARTY_LIBS 和去掉WITH_TIFFCMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthread -lrtx86的opencv默认安装目录为/usr/local,对于arm的交叉编译的库来说并不合适,所以把CMAKE_INSTALL_PREFIX变量改为/usr/local/arm/lib/opencv/没有安装tiff图像的支持,去掉WITH_TIFF点击Generate生成Makefile3、使用超级用户进入目录/home/pww71/opencv-arm,运行make编译opencv4、运行make install,将opencv生成的库和头文件安装到目录/usr/local/arm/lib/opencv/QT的配置已经解压和安装了qt4.5的x86的库和arm交叉交叉编译的库安装qtcreator时记得安装地址并且修改配置文件/etc/profile 添加上qtcreator的安装地址的bin目录我的是pathmunge pathmunge /opt/EmbedSky/qtcreator-1.3.0/bin为了能找到qmake 还要添加路径pathmunge /opt/EmbedSky/qt-4.5/_install/x86/binpathmunge /opt/EmbedSky/qt-4.5/_install/am/bin到配置文件/etc/profile中使用超级用户输入命令source /etc/profile 后再执行qtcreator命令打开Qtcreator界面进入Tools-Options左侧选择QT4-Qt Versions 右侧选项里:如果通过软件添加和载卸工具添加了qt4的话Auto-detected会自动的选择Qt in PATH /usr/local/bin/qmake-qt4 用这个qmake工具生成的可执行文件不用添加-qws命令行参数自己安装的qt4.5 我是如下配置Qt in PATH /opt/EmbedSky/qt-4.5/_install/arm/bin/qmake添加Manual x86-qt-4.5.0 /opt/EmbedSky/qt-4.5/_install/x86/bin/qmake生成的可执行文件需要添加-qws命令行参数分别点击rebuild 最后点击okBuild Settings 中根据需要Add刚才配置的选择BUild configuration for ... 也选择相应的选项在QT工程文件.Pro中添加以下内容INCLUDEPATH += /usr/local/include/opencvLIBS += /usr/local/lib/libcv.so \/usr/local/lib/libcvaux.so \/usr/local/lib/libcxcore.so \/usr/local/lib/libhighgui.so \/usr/local/lib/libml.sopc仿真必须将以上库还要添加到项目文件夹里如果是arm开发板的程序则添加以下内容INCLUDEPATH += /usr/local/arm/lib/opencv/include/opencvLIBS += /usr/local/arm/lib/opencv/lib/libcv.so \/usr/local/arm/lib/opencv/lib/libcvaux.so \/usr/local/arm/lib/opencv/lib/libcxcore.so \/usr/local/arm/lib/opencv/lib/libhighgui.so \/usr/local/arm/lib/opencv/lib/libml.so编译生成可执行文件移植到开发板提示缺少什么库就按提示添加相应的图像库到lib中以及qt4.5的库和字体都添加到相应的目录中中间有一个这个提示QWSDisplay::Data::init: Invalid argumentClient can't attach to main ram memory.Aborted这个是表示缺少命令行参数-qws是Qt4的问题运行命令添加该参数ok一切正常注意的是qtcreator。
QT-Embeded-ARM安装、ARM上QSQLite drivers not loaded的解决1.安装QT-Embeded-ARM(1)安装arm-linux-gcc交叉编译器将arm-linux-gcc-4.4.3.tar.gz放在一个文件夹下,进入终端输入:tar zxvf arm-linux-gcc-4.4.3.tar.gz -C /opt(2)然后设置环境变量:①终端输入sudo gedit /etc/profile (sudo vi /etc/profile 也可)末尾加上export PATH=$PATH:/opt/gcc-3.4.6-glibc-2.3.6/arm-linux/bin/arm-linux-gcc (arm-linux-gcc的bin目录,绝对地址)②终端输入sudo gedit /root/.bashrc (sudo vi /etc/profile 也可)末尾加上export PATH=$PATH:/opt/gcc-3.4.6-glibc-2.3.6/arm-linux/bin/arm-linux-gcc (arm-linux-gcc的bin目录,绝对地址)设置完后重新启动电脑,输入:arm-linux-gcc -v (-v即-verbose)注:vi的使用先按ESC键,然后输入下面的命令后按回车:w //Vi保存当前编辑文件,但并不退出,而是继续等待用户输入命令。
在使用w命令时,可以再给编辑文件起一个新的文件名。
:w newfile //此时Vi将把当前文件的内容保存到指定的newfile中,而原有文件保持不变。
若newfile是一个已存在的文件,则Vi在显示窗口的状态行给出提示信息:File exists (use ! to override) ,此时,若用户真的希望用文件的当前内容替换newfile中原有内容,可使用命令:w! newfile //否则可选择另外的文件名来保存当前文件。
dbus源码用交叉编译摘要:1.Dbus简介2.交叉编译概念3.Dbus源码交叉编译流程4.编译工具链的选择5.编译实战经验分享正文:【1.Dbus简介】Dbus(Domain Bus)是一种分布式消息传递系统,旨在为各种应用程序提供一种简单、可靠、安全的消息传递机制。
它是一个跨平台的通信框架,支持多种编程语言和操作系统。
在Linux系统中,Dbus广泛应用于桌面环境、服务器应用等,为各种组件提供通信支持。
【2.交叉编译概念】交叉编译(Cross-Compilation)是指在一种计算机架构上编写程序,然后在另一种计算机架构上编译和运行。
这种方法通常用于嵌入式系统开发,因为嵌入式设备的资源有限,无法直接在设备上进行编译。
交叉编译可以帮助开发者快速构建和测试嵌入式软件。
【3.Dbus源码交叉编译流程】要实现Dbus源码的交叉编译,大致可以分为以下几个步骤:1.准备编译环境:根据目标平台的架构和操作系统,搭建相应的编译工具链。
2.获取Dbus源码:从Dbus官方网站或GitHub仓库下载最新版本的源码。
3.配置源码:根据目标平台和编译器进行相应的配置,主要包括修改编译选项、链接选项等。
4.编译Dbus源码:使用交叉编译工具链,编译Dbus源码。
在这个过程中,可能需要处理一些编译错误或警告,以便确保编译结果的正确性。
5.测试编译结果:在目标平台上运行编译好的Dbus二进制文件,检查其功能是否正常。
【4.编译工具链的选择】在选择编译工具链时,需要考虑以下几个因素:1.目标平台的架构:根据目标设备的硬件架构,选择相应的编译工具链。
例如,对于ARM架构的设备,可以使用arm-linux-gnueabi-gcc等工具链。
2.目标操作系统的兼容性:确保编译工具链与目标操作系统兼容,以便顺利编译和运行Dbus。
3.编译器的版本:选择合适版本的编译器,以确保与Dbus源码的兼容性。
【5.编译实战经验分享】在进行Dbus源码交叉编译时,以下几点经验可能对您有所帮助:1.熟悉Dbus源码结构:了解Dbus源码的组织方式,有助于更快地找到需要修改的部分。
交叉编译dbus模块到Qt遇到的错误及解决由于⽤qt来检测U盘插拔,要⽤dbus。
pc调试通过后,发现到板⼦⾥没有dbus。
原来默认情况下,编译arm版本qt时是不带dbus的,因此要重新交叉编译qt。
我的配置:./configure -prefix /usr/local/arm/arm2-qt-4.8.1 -opensource -embedded arm -xplatform qws/linux-arm-g++ -no-webkit -qt-libtiff -qt-libmng -qt-mouse-tslib -qt-mouse-pc -no-mouse-linuxtp -no-neon -nomake examples -nomake docs -nomake demos -nomake tools -no-qt3support -dbus版本为qt4.8.1,注意最后的“-dbus”就是让qt带dbus模块。
结果报错:The QtDBus module cannot be enabled because libdbus-1 version 0.93 was not found. 说需要⼀个libdbus-1,yum install了⼀下,发现这个东西已经安装了在pc上,否则我程序在pc下也不会跑通。
只是没有嵌⼊式版本的,需要⾃⼰⽤源码交叉编译。
我下载的dbus源码的版本是1.0.2,看到⽹上移植这个的多。
⾸先新建⼀个⽂件夹,mkdir /usr/local/arm/dbus-1.0.2,然后解压源码,进到dbus-1.0.2⽬录⾥,输⼊:./configure --host=arm-linux --prefix=/usr/local/arm/dbus-1.0.2 CC=arm-linux-gcc --cache-file=arm-linux.cache --without-x 报错:checking abstract socket namespace... configure: error: cannot run test program while cross compiling解决:1,⾸先⽤locate pkgconfig查看下pkgconfig安装了没有,⼀般都安装了。