正文
linuxqt编译命令的简单介绍
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
Qt5 在Linux 下的编译,该怎么处理
[wanglj@localhost testQT]$ make
g++ -o testQT main.o -L/opt/Qt5.1.1/5.1.1/gcc_64/lib -lqt-mt -lXext -lX11 -lm
main.o: In function `main':
/home/wanglj/testQT/main.cpp:6: undefined reference to `QApplication::QApplication(int, char**, int)'
main.o: In function `QString':
/usr/include/QtCore/qstring.h:413: undefined reference to `QString::fromAscii_helper(char const*, int)'
main.o: In function `main':
/home/wanglj/testQT/main.cpp:7: undefined reference to `QLabel::QLabel(QString const, QWidget*, QFlagsQt::WindowType)'
main.o: In function `~QString':
/usr/include/QtCore/qstring.h:869: undefined reference to `QString::free(QString::Data*)'
/usr/include/QtCore/qstring.h:869: undefined reference to `QString::free(QString::Data*)'
collect2: ld 返回 1
make: *** [testQT] 错误 1
但若直接用 qtcreator 打开编译,则无错误
并且find -name libqt-mt* 也找不到其他版本的该文件
用qtcreator编译好的可执行文件,也找不到连接该lib文件
[wanglj@localhost build-testQT-桌面-Debug]$ ldd testQT
linux-vdso.so.1 = (0x00007fff4ddff000)
libQtGui.so.4 = /usr/lib64/libQtGui.so.4 (0x000000397f000000)
libQtCore.so.4 = /usr/lib64/libQtCore.so.4 (0x000000397ea00000)
libpthread.so.0 = /lib64/libpthread.so.0 (0x0000003978600000)
libstdc++.so.6 = /usr/lib64/libstdc++.so.6 (0x00007fda6a081000)
libm.so.6 = /lib64/libm.so.6 (0x0000003977a00000)
libgcc_s.so.1 = /lib64/libgcc_s.so.1 (0x0000003983a00000)
libc.so.6 = /lib64/libc.so.6 (0x0000003977e00000)
libgthread-2.0.so.0 = /lib64/libgthread-2.0.so.0 (0x000000397a600000)
librt.so.1 = /lib64/librt.so.1 (0x0000003978e00000)
libglib-2.0.so.0 = /lib64/libglib-2.0.so.0 (0x0000003979200000)
libpng12.so.0 = /usr/lib64/libpng12.so.0 (0x000000397be00000)
libz.so.1 = /lib64/libz.so.1 (0x0000003978a00000)
libfreetype.so.6 = /usr/lib64/libfreetype.so.6 (0x000000397ba00000)
libgobject-2.0.so.0 = /lib64/libgobject-2.0.so.0 (0x0000003979e00000)
libSM.so.6 = /usr/lib64/libSM.so.6 (0x0000003985a00000)
libICE.so.6 = /usr/lib64/libICE.so.6 (0x0000003984e00000)
libXi.so.6 = /usr/lib64/libXi.so.6 (0x000000397ce00000)
libXrender.so.1 = /usr/lib64/libXrender.so.1 (0x000000397d600000)
libXrandr.so.2 = /usr/lib64/libXrandr.so.2 (0x000000397de00000)
libXfixes.so.3 = /usr/lib64/libXfixes.so.3 (0x000000397da00000)
libXcursor.so.1 = /usr/lib64/libXcursor.so.1 (0x000000397e200000)
libXinerama.so.1 = /usr/lib64/libXinerama.so.1 (0x000000397e600000)
libfontconfig.so.1 = /usr/lib64/libfontconfig.so.1 (0x000000397d200000)
libXext.so.6 = /usr/lib64/libXext.so.6 (0x000000397c600000)
libX11.so.6 = /usr/lib64/libX11.so.6 (0x000000397b600000)
libdl.so.2 = /lib64/libdl.so.2 (0x0000003978200000)
/lib64/ld-linux-x86-64.so.2 (0x0000003977600000)
libuuid.so.1 = /lib64/libuuid.so.1 (0x0000003983600000)
libexpat.so.1 = /lib64/libexpat.so.1 (0x000000397c200000)
libxcb.so.1 = /usr/lib64/libxcb.so.1 (0x000000397ae00000)
libXau.so.6 = /usr/lib64/libXau.so.6 (0x000000397aa00000)
------解决方案--------------------
INCPATH = -I/usr/lib64/qt-3.3/mkspecs/default -I. -I. -I$(QTDIR)/include
这一行看上去你调用的qmake不是5.1.1的。试试指定完整路径运行qmake
/opt/Qt5.1.1/5.1.1/gcc_64/bin/qmake testQT.pro
linux下 qt程序源代码如何编译运行
仔细看里面的源代码,应该有一些文件里有连接到*.lib文件的,这是QT的动态库文件把QT库编译成linux下的*.lib,然后编译的时候,把lib文件放在同一文件夹,并且编译命令加上-l *.lib或者放到根目录下的lib目录下也可以。这样试一下。.o文件还需要经过连接才能生成可执行的文件。
linux命令行编译qt程序时,默认使用的是arm-linux-gcc编译器,生成的可执行程序无法
修改$QTDIR/mkspecs目录下的符号链接default.将其指向linux-g++
$QTDIR是路径,具体要看你把QT装到什么地方和QT本身的版本,一般是/usr/lib[64]/qt4
修改default符号链接的作用是让qmake在生成Makefile的时候将Makefile文件中的编译器变量$CC与$CXX赋值成gcc和g++
qt可编译运行但不能独立运行linux
出问题的exe名称为TestApp.exe,在Visual Studio下编译运行都正常,但无法直接点击exe运行。报错为(应用程序无法正常启动(0xc000007b)。请单击“确定”关闭应用程序)
本人环境:基于visual studio IDE下的QT编译器,共有四种,在 qt-版本号 文件夹下。
我的问题解决步骤如下:
1.看准自己项目的编译环境
我电脑虽然是64位的,但是编译器环境是32位的,故之后所有都需要以32位为标准
由于是Visual Studio ,所以采用下面文件夹中的msvc2017环境进行编译(没有标注64位就是32位)
2.添加系统环境变量
打开控制面板搜索环境变量,对系统path进行更改
按照上一步的环境进行配置!!!不要添加冗余路径,一项即可!!
PS:多项也可以,但是要在IDE中选择正确的default编译器,不然系统会搞混64和32位的dll
3.进入qt自带的命令行中
开始框中搜索 → 选择合适的环境(比如我是MSVC 2017 32-bit)→ 进入目标exe程序所在文件夹
输入命令
windeployqt xxx(目标exe名称)
复制
PS:该命令(windeployqt)若添加了系统Path后,也可以直接在系统cmd中运行,前提是:环境Path只有适合自己项目的那一项!!(only 32 or 64) 否则系统会弄混。。。然后就又失败链接了qaq
此时,在exe的文件夹下面会多出很多文件夹和dll文件,表明已经link成功
再次强调:不同位数的编译器链接出来的dll不同!一定一定要适合自己的程序
linuxqt编译命令的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、linuxqt编译命令的信息别忘了在本站进行查找喔。