qt 编译问题总结
1)使用make命令编译Qt原码时出现了 /usr/bin/ld: cannot find -lXrender 问题:
/usr/bin/ld: cannot find -lXrender
collect2: ld 返回 1
make[1]: *** [../../../../lib/libQtWebKit.so.4.7.4] 错误 1
make[1]:正在离开目录 `/home/Qt/qt-everywhere-opensource-src-4.7.4/src/3rdparty/webkit/WebCore'
make: *** [sub-webkit-make_default-ordered] 错误 2
其解决方法如下:
执行sudo apt-get install libXrender-dev命令,安装相应的lib文件。
所以最好在编译Qt原码前先执行以下命令:
sudo apt-get install libglib2.0-dev libSM-dev libxrender-dev libfontconfig1-dev libxext-dev
sudo apt-get install libglui-dev
安装相应的lib文件,防止编译出错。
再上网搜索一下,发现在Linux下编译应用程序常常会出现如下错误:
/usr/bin/ld:cannot find -lxxx
意思是编译过程找不到对应库文件。其中-lxxx表示链接库文件libxxx.so。
一般出现这种错误有以下几种原因:
1.系统缺乏对应的库文件
2.库文件版本不对应
3.库文件链接错误
4.库文件路径设置不正确
对于前2种情况,可以通过下载安装lib来解决:
sudo apt-get install libxxx-dev(上面编译Qt的情况大多是这样)
而对于第3种情况,通过find或者locate命令定位到链接文件,查看链接文件是否正确的指向了lib文件。如果不是,用 ln -sf */libxxx.so.x */libxxx.so 命令修改。
对于最后一种情况,可以到/etc/ld.so.conf.d目录下,修改其中任意一份conf文件(也可自建conf),将lib所在的目录写进去,然后在终端输入ldconfig更新缓存。
2) 以下博客来自
Andysun1986:http://blog.csdn.net/andysun1986/article/details/6308838
去年春天我用Qt3写了一个小软件,感觉Linux下用Qt作界面程序很方便,和Windows下的VC差不多. 所以上次ubuntu 7.10系统一安装好就将Qt3开发包安装上去。这儿顺便把以前安装Qt3软件包貼出来。
#sudo apt-get install qt3-dev-tools qt3-examples Python-qt3 qt3-designer qt3-assistant
现在Qt 的版本已经到Qt-4.3.2了,最近打算用Qt4写个小程序。网上找到安装如下软件包:
#sudo apt-get install qt4-dev-tools qt3-examples qt4-designer qt3-assistant python-qt4
这 里面qt3-examples qt3-assistant,因为相应的qt4版本apt-get找不到,所以就安装了以前的版本. 下面写一个Qt4 的hello world, 来源于 C++ GUI Programming with Qt 4的第一个程序,如下:
#include
#include
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QLabel *label = new QLabel("Hello Qt!");
label->show();
return app.exec();
}
可以发现这个简单的hello world和Qt3就有一些变化了。
下面编译程序:
#qmake -project
生成配置文件xxx.pro(其中xxx为工程文件名)
#qmake
自动生成Makefile文件
#make
出现了下面的错误信息:
me.cpp:1:28: 错误: qt4/QApplication:No such file or directory
me.cpp:2:22: 错误: qt4/QLabel:No such file or directory
me.cpp: In function ‘int main(int, char**)’:
me.cpp:5: 错误: ‘QApplication’ 在此作用域中尚未声明
me.cpp:5: 错误: expected `;' before ‘app’
me.cpp:6: 错误: ‘QLabel’ 在此作用域中尚未声明
me.cpp:6: 错误: ‘label’ 在此作用域中尚未声明
me.cpp:6: 错误: expected type-specifier before ‘QLabel’
me.cpp:6: 错误: expected `;' before ‘QLabel’
me.cpp:8: 错误: ‘app’ 在此作用域中尚未声明
me.cpp: At global scope:
me.cpp:3: 警告: 未使用的参数 ‘argc’
me.cpp:3: 警告: 未使用的参数 ‘argv’
make: *** [me.o] 错误 1
打开Makefile文件, 发现里面包含的Qt文件全部是和 Qt3有关的,使用qmake -v 命令发现果然qmake的版本是3,whereis找到qmake命令所在目录/usr/bin/qmake
#ls -l qmake*
lrwxrwxrwx 1 root root 23 2008-01-18 20:53 /usr/bin/qmake -> /etc/alternatives/qmake
-rwxr-xr-x 1 root root 2052100 2007-10-31 01:29 /usr/bin/qmake-qt3
-rwxr-xr-x 1 root root 3378140 2007-11-06 07:56 /usr/bin/qmake-qt4
# ls -l /etc/alternatives/qmake
lrwxrwxrwx 1 root root 18 2008-01-18 20:56 /etc/alternatives/qmake -> /usr/bin/qmake-qt3
现在清楚了 qmake是个链接,通过alternatives/qmake指向qmake-qt3,现在想让qmake默认为qmake-qt4,只要重定向链接
#sudo rm /etc/alternatives/qmake
#sudo ln -s /usr/bin/qmake-qt4 /etc/alternatives/qmake
同样,想要designer命令默认是版本4,只要
#sudo rm /etc/alternatives/designer
#sudo ln -s /usr/bin/designer-qt4 /etc/alternatives/designer
现在好了,再次qmake -project , qmake, make 上面的hello world文件,一切顺利。
3)以下博客来自 http://www.cnitblog.com/zouzheng/archive/2010/07/06/67197.html
在交叉编译过程中,在./configure中加上类似-qt-mouse-*和-qt-kbd-*就会出现unknown argument错误。
./configure
-prefix /usr/local/qte-arm (强制安装在此路径)
-debug-and-release 编译和链接两个版本的Qt
-qt3support 支持QT3
-qt-zlib 捆绑使用的Qt的zlib。
-qt-libtiff 使用Qt的捆绑的libtiff。
-qt-libpng 使用Qt的捆绑的的libpng。
-qt-libmng 使用Qt的捆绑的libmng。
-qt-libjpeg 使用Qt的捆绑的的libjpeg。
-make libs 新增 libs
-nomake examples 排除 。。
-nomake demos 排除。。
-nomake docs 排除。。
-no-cups 不要编译CUPS的支
-iconv 编译iconv拥有支持(3)
-xplatform qws/linux-arm-g++
-embedded arm
-little-endian
-qt-freetype
-depths 8,16,24,32
-qt-gfx-linuxfb
-no-gfx-transformed
-no-gfx-qvfb
-no-gfx-vnc
-no-gfx-multiscreen
-no-dbus
-qt-sql-sqlite
-qt-kbd-qvfb
-qt-kbd-tty
-qt-mouse-pc
-no-glib
-plugin-mouse-tslib -I/usr/local/tslib/ -L/usr/local/tslib/lib -D__ARM_ARCH_5TEJ__
(包含路径) (库路径) (定义的预处理器)
以mipsel为架构的loongson1B开发板在交叉编译QT4.5以上版本时的配置为:
- ./configure -prefix /opt/qt4-mipsel -release -shared -fast -pch -no-qt3support -qt-sql-sqlite -no-libtiff -no-libmng -qt-libjpeg -qt-zlib -qt-libpng -qt-freetype -no-openssl -no-webkit -nomake examples -nomake demos -nomake tools -optimized-qmake -no-phonon -no-nis -no-opengl -no-cups -no-xcursor -no-xfixes -no-xrandr -no-xrender -no-xkb -no-sm -no-xinerama -no-xshape -no-separate-debug-info -xplatform qws/linux-mips-g++ -embedded mips -little-endian -depths 16 -no-qvfb -qt-gfx-linuxfb -no-gfx-qvfb -no-kbd-qvfb -no-mouse-qvfb -confirm-license -qt-mouse-tslib -I/opt/tslib-mipsel/include -L/opt/tslib-mipsel/lib
如果出错:
/usr/local/arm/4.1.2/bin/../lib/gcc/arm-angstrom-linux-gnueabi/4.1.2/../../../../arm-angstrom-linux-gnueabi/bin/ld: warning: libts-0.0.so.0, needed by /home/stillwater/4.1.2/qt-everywhere-opensource-src-4.6.0/lib/libQtGui.so, not found (try using -rpath or -rpath-link)
/home/stillwater/4.1.2/qt-everywhere-opensource-src-4.6.0/lib/libQtGui.so: undefined reference to `ts_read_raw'
/home/stillwater/4.1.2/qt-everywhere-opensource-src-4.6.0/lib/libQtGui.so: undefined reference to `ts_open'
/home/stillwater/4.1.2/qt-everywhere-opensource-src-4.6.0/lib/libQtGui.so: undefined reference to `ts_fd'
/home/stillwater/4.1.2/qt-everywhere-opensource-src-4.6.0/lib/libQtGui.so: undefined reference to `ts_config'
/home/stillwater/4.1.2/qt-everywhere-opensource-src-4.6.0/lib/libQtGui.so: undefined reference to `ts_close'
/home/stillwater/4.1.2/qt-everywhere-opensource-src-4.6.0/lib/libQtGui.so: undefined reference to `ts_read'
collect2: ld returned 1 exit status
make[2]: *** [deform] Error 1
make[2]: Leaving directory `/home/stillwater/4.1.2/qt-everywhere-opensource-src-4.6.0/demos/deform'
make[1]: *** [sub-deform-make_default] Error 2
make[1]: Leaving directory `/home/stillwater/4.1.2/qt-everywhere-opensource-src-4.6.0/demos'
make: *** [sub-demos-make_default-ordered] Error 2
解决办法:
修改qt-4.6.1/mkspecs/qws/linux-mips-g++/qmake.conf 文件(添加lts参数):
QMAKE_CC = mips-linux-gcc -lts
QMAKE_CXX = mips-linux-g++ -lts
QMAKE_LINK = mips-linux-g++ -lts
QMAKE_LINK_SHLIB = mips-linux-g++ -lts
#sudo make install
4)
mipsel-linux-g++ -Wl,-rpath-link,/opt/qt-everywhere-opensource-src-4.8.6/lib -fno-exceptions -Wl,-O1 -Wl,-rpath,/opt/qt-everywhere-opensource-src-4.8.6/src/3rdparty/webkit/Source/lib -Wl,-rpath,/opt/qt4-mipsel/lib -Wl,-rpath,/opt/qt4-mipsel/lib -o tst_qwebframe .obj/release-shared-emb-mips/tst_qwebframe.o .obj/release-shared-emb-mips/qrc_tst_qwebframe.o -L/TSLIB/lib -L/opt/qt-everywhere-opensource-src-4.8.6/lib -L/TSLIB/lib -L/opt/qt-everywhere-opensource-src-4.8.6/lib -lQtDeclarative -lQtScript -lQtSvg -lQtSql -lQtWebKit -lQtTest -lQtGui -lQtNetwork -lQtCore -lpthread
/opt/gcc-4.3-ls232-softfloat/lib/gcc/mipsel-linux/4.3.0/../../../../mipsel-linux/bin/ld: warning: libts-0.0.so.0, needed by /opt/qt-everywhere-opensource-src-4.8.6/lib/libQtGui.so, not found (try using -rpath or -rpath-link)
/opt/qt-everywhere-opensource-src-4.8.6/lib/libQtGui.so: undefined reference to `ts_read_raw'
/opt/qt-everywhere-opensource-src-4.8.6/lib/libQtGui.so: undefined reference to `ts_open'
/opt/qt-everywhere-opensource-src-4.8.6/lib/libQtGui.so: undefined reference to `ts_fd'
/opt/qt-everywhere-opensource-src-4.8.6/lib/libQtGui.so: undefined reference to `ts_config'
/opt/qt-everywhere-opensource-src-4.8.6/lib/libQtGui.so: undefined reference to `ts_close'
/opt/qt-everywhere-opensource-src-4.8.6/lib/libQtGui.so: undefined reference to `ts_read'
collect2: ld returned 1 exit status
Makefile.WebKit:109: recipe for target 'tst_qwebframe' failed
make[3]: *** [tst_qwebframe] Error 1
make[3]: Leaving directory '/opt/qt-everywhere-opensource-src-4.8.6/src/3rdparty/webkit/Source/WebKit/qt/tests/qwebframe'
Makefile.WebKit:51: recipe for target 'sub-qwebframe-make_default' failed
make[2]: *** [sub-qwebframe-make_default] Error 2
make[2]: Leaving directory '/opt/qt-everywhere-opensource-src-4.8.6/src/3rdparty/webkit/Source/WebKit/qt/tests'
Makefile.WebKit:187: recipe for target 'sub-WebKit-qt-tests-make_default-ordered' failed
make[1]: *** [sub-WebKit-qt-tests-make_default-ordered] Error 2
make[1]: Leaving directory '/opt/qt-everywhere-opensource-src-4.8.6/src/3rdparty/webkit/Source'
Makefile:562: recipe for target 'sub-webkit-make_default-ordered' failed
make: *** [sub-webkit-make_default-ordered] Error 2
eb http://ppa.launchpad.net///deb.opera.com/opera-stable/ stable non-free/ubuntu maverick main
解决办法:
修改qt-everywhere-opensource-src-4.6.0/mkspecs/qws/linux-mips-g++/qmake.conf 文件(添加lts参数):
QMAKE_CC = mipsel-linux-gcc -lts
QMAKE_CXX = mipsel-linux-g++ -lts
QMAKE_LINK = mipsel-linux-g++ -lts
QMAKE_LINK_SHLIB = mipsel-linux-g++ -lts
qt 编译问题总结的更多相关文章
- osg,qt编译的一些问题
osg编译例子的时候,打开文件就出问题,可能是一些不兼容的问题 qt编译的是时候要添加qt和vs2010的整合工具,这样才能把 vs2010里面的QTDIR变量和环境变量QTDIR关联起来 同是右击文 ...
- Solaris 10下Qt编译Oracle 10g驱动
上回书讲到<Oracle 10g在Solaris 10中安装详解>,现在开始用Qt来编译下Oracle 10g驱动吧!这样就可以通过Qt程序联入Oracle数据库了! Oracle的环境变 ...
- Qt编译安装后中文无法显示问题
闲的蛋疼,把Ubuntu删了,再装10.04的时候,QT编译后运行自己的程序已经不能显示中文了,只能显示英文,字体贼丑... 想了各种办法,都没解决.. 最后:终于搞定: apt-get instal ...
- 让QT编译快一点(增加基础头文件)
姚冬,中老年程序员 进藤光.杨个毛.欧阳修 等人赞同 我是来反对楼上某些答案的.我曾经用MFC写了金山词霸(大约20多万行),又用Qt写了YY语音(大约100多万行),算是对两种框架都比较有经验.纠正 ...
- Qt编译慢吗?
1. “用Qt写的程序编译比MFC慢”的说法是错误的绝对错误,单位代码行数编译Qt远比MFC快得多,因为Qt库的头文件设计非常好,尽量都使用了前置声明,避免了头文件嵌套,几乎所有类都使用了公有类和私有 ...
- Qt编译时MinGW去掉对gcc动态库的依赖(去掉对libgcc_s_dw2-1.dll,libstdc++-6.dll的依赖)
用Qt写点东西,我一般是下载官方的MinGW编译工具包,它有个不好的地方,经常还会多一些除了Qt库以外的其它的依赖动态链接库,比如:libgcc_s_dw2-1.dll,libstdc++-6.dll ...
- Qt编译oci教程
Qt编译OCI教程 上图oci.dll 不是oci.lib 我很奇怪网上大部分教程都是写的oci.lib,其实大家可以去oracle目录找一下这个文件,看看是不是在这个目录,我找了一下没发现.而lib ...
- 关于QT编译错误问题
这里的意思是出现QT编译错误: 1.之前编译没问题,突然就报错了,而且错误根本不知道啥玩意. 2.编译出现不能自动更新,比如更改ui但是编译之后没该改变. ... 解决方法: 1.删除Makefile ...
- qt 编译的文件没有生效
/******************************************************************* * qt 编译的文件没有生效 * qt交叉编译时,生成的可执行 ...
- QT编译发布程序后报错如缺少dll、“应用程序无法正常启动(0xc000007b)”的可能解决方法
QT编译发布程序后报错如缺少dll.“应用程序无法正常启动(0xc000007b)”的可能解决方法 最近项目要用qt,因为初学没有经验,遇到些小问题常常没什么头绪,也查不到解决方法,刚刚还因为低端错误 ...
随机推荐
- usr类库的使用(一般用在第三方类库使用系统库报错头文件找不到时)
第三方Html解析类库Hpple,在导入框架libxml2.2.dylib后,XCode仍然找不到<libxml/tree.h>. 1 .项目 -Targets 中的 Build P ha ...
- Duilib嵌入CEF以及JavaScript与C++交互
转载:http://blog.csdn.net/foruok/article/details/50573612 转载:http://blog.csdn.net/foruok/article/detai ...
- SLES 10安装Oracle10gR2笔记
SLES 10安装Oracle10gR2笔记 一. 数据库安装 . 安装C/C++ Compiler gcc --version验证是否安装 . 验证Service Pack版本 SPident –v ...
- 相机位姿估计1_1:OpenCV:solvePnP二次封装与性能测试
关键词:OpenCV::solvePnP 文章类型:方法封装.测试 @Author:VShawn(singlex@foxmail.com) @Date:2016-11-27 @Lab: CvLab20 ...
- [poj2492]A Bug's Life(并查集+补集)
A Bug's Life Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 34678 Accepted: 11339 D ...
- vmware 三种网络模式
Bridged方式:vm相当于局域网内的一台独立主机.可以通过局域网的网关访问互联网.vm和宿主机的关系就像连接在同一个hub的两个电脑. NAT方式(网络地址转换模式):vm可以上外网,可以访问宿主 ...
- 平衡二叉树AVL
1.定义 平衡二叉树(Balanced Binary Tree)是二叉查找树的一个改进,也是第一个引入平衡概念的二叉树.1962年,G.M. Adelson-Velsky 和 E.M. Landis发 ...
- asp.net 一句话搞定分页
rows 是客户端传过来的行数,page是页码,传参就需要就两个参数就行,sql语句中_row 和_page 自己声明的局部变量,值还是相应的row 和page ,为了运算而已. 用数据库类获得它的D ...
- A*算法 -- 八数码问题和传教士过河问题的代码实现
前段时间人工智能的课介绍到A*算法,于是便去了解了一下,然后试着用这个算法去解决经典的八数码问题,一开始写用了挺久时间的,后来试着把算法的框架抽离出来,编写成一个通用的算法模板,这样子如果以后需要用到 ...
- Modernizr.js:为HTML5和CSS3而生!
原文链接:http://caibaojian.com/modernizr-js.html modernizr这个JS,在国外的主题里面很多地方都看到,就只记得是为html补充的,有点类似与respon ...