海思编译qt5
[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*, QFlags<Qt::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
‘贰’ Qt4升级到Qt5需要干的那些事(CMake)
1.把CMakeList.txt里面的find_package(qt4 required)替换成了find_package(Qt5Widgets)
如果你的Cmake报错:
CMake Error at C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Moles/FindQt4.cmake:664 (message):
Could NOT find QtCore.
Check D:/chen/CMakeFiles/CMakeError.log for more details.
参考: Detecting Qt5 with CMake
2.删去INCLUDE(${QT_USE_FILE})
将TARGET_LINK_LIBRARIES后面括号里面的${QT_LIBRARIES}删去
将target_link_libraries simpleTree Qt5::Widgets加入到addLibrary后面(其中simpleTree是你要编译的项目名字,在CMakeList里面找一下,出现了很多次)
如果你的CMake报错:
CMake Error at CMakeLists.txt:36 (INCLUDE):
include called with wrong number of arguments. Include only takes one
file.
参考:
Cmake and QT5 - Include only takes one argument
Implementing Qt project through CMake
3.QT4_WRAP_CPP(HEADERS_MOC ${INCLUDE_FILES})
QT4_WRAP_UI(FORMS_HEADERS ${FORMS})
QT4_ADD_RESOURCES(RESOURCES_RCC ${RESOURCES})
里面的4都改成5
如果你的CMake报错:
Unknown CMake command "QT4_WRAP_CPP".
4、把*.cmake文件里面的FIND_PACKAGE(Qt4 COMPONENTS QtCore QtXml QtOpenGL QtGui)替换成
FIND_PACKAGE(Qt5 QUIET COMPONENTS Core Xml OpenGL Gui Widgets)
这里还是报错findqt4有问题。
参考:
Autodetect and use Qt4 or Qt5
‘叁’ 怎么在命令行下用g++ 编译 QT5
那个是软件的输出窗口,我没用过MINgw,但你可以看看那个软件的设置菜单,把输出窗口关闭就可以了.编译时要加一个选项: -mwindows ,例如: gcc -mwindows -o test.exe main.c 或者 g++ -mwindows -o test.exe main.cpp .
‘肆’ cmake + Qt 5 编译出错,请帮忙看看怎么解决
Qt在编译时,需要首先使用uic.exe编译UI文件,通过moc.exe处理Q_OBJECT之类的宏,当然你可以去掉这些定义,否则就需要加上:
# COMPILE UIs
SET(UIS
mnwindow
)
FOREACH (ui_file ${UIS})
SET(TMP_IN "${PROJECT_SOURCE_DIR}/res/${ui_file}.ui")
SET(TMP_OUT "${PROJECT_BINARY_DIR}/ui_${ui_file}.h")
EXECUTE_PROCESS(COMMAND ${QT_FOLDER}/bin/uic.exe -o ${TMP_OUT} ${TMP_IN})
MESSAGE(STATUS "EXEC=${QT_FOLDER}/bin/uic.exe -o ${PROJECT_BINARY_DIR}/ui_${ui_file}.h ${PROJECT_SOURCE_DIR}/res/${ui_file}.ui")
ENDFOREACH(ui_file)
# CREATE MOC
SET(HEADERS
mainwindow
)
FOREACH (header_file ${HEADERS})
SET(TMP_IN "${PROJECT_SOURCE_DIR}/inc/${header_file}.h")
SET(TMP_OUT "${PROJECT_BINARY_DIR}/moc_${header_file}.cpp")
EXECUTE_PROCESS(COMMAND ${QT_FOLDER}/bin/moc.exe -o ${TMP_OUT} ${TMP_IN})
SET(MOCS ${MOCS} ${PROJECT_BINARY_DIR}/moc_${header_file}.cpp)
MESSAGE(STATUS "EXEC=${QT_FOLDER}/bin/moc.exe -o ${PROJECT_BINARY_DIR}/moc_${header_file}.cpp ${PROJECT_SOURCE_DIR}/inc/${header_file}.h")
ENDFOREACH(header_file)
free c#.net qr creator
这里要注意的是:EXECUTE_PROCESS在COMMAND后面不能加引号,命令直接写,否则执行的程序也不会出错,但也不会正常运行.
‘伍’ Qt5,QtAV使用,调试时,fatal error LNK1104: 无法打开文件“Qt5AVWidgetsd.lib”,怎么解决
这段时间需要用QT开发一个播放直播流的功能,能够播放各种格式的直播流,并且CPU占用率不要太高(可以占用GPU),这些是我们的目标。
直播流推流的技术进展在上一篇博客中已经提到了,目前我的能力范围内只能推送RTMP格式的链接,所以需要播放端能够解析这种格式的链接。
下面是一张自己做的图,对QT可调用的几种播放方面的开源库进行对比:
打开build-QtAV-Desktop_Qt_5_7_1_MSVC2015_64bit-Debug文件夹,这个文件夹是和git clone之后的那个目录同级的,
找到sdk_install.bat,这个脚本能够自动将相应的DLL文件复制到正确的位置,可以看一下代码,很容易理解:
View Code
此时就可以使用所有QT-AV的例子了,也可以创造自己的新工程并调用它。
注意:在DEBUG模式下编译的QT-AV只能让同样在DEBUG模式下编译的工程使用,
如果你想要使用windeployqt来打包你的程序(即生成绿色无安装版本程序),需要将QT-AV和你自己的工程都在QT Creator的release模式下进行编译。
更多关于使用windeployqt来打包程序的细节不在此赘述。我已经将自己打包的一个程序发布在了GITHUB上,可以参考一下:https://github.com/xuanli/qt-av-stream-player
切换当前目录到如下位置:
QtAVexamplessimpleplayer
点击打开simpleplayer_sdk.pro来在QT Creator中打开这个工程,不要打开simpleplayer.pro;
然后找到playerwindow.cpp,将68行进行如下修改,即可打开指定直播流链接(任意ffmpeg支持的格式,RTMP也支持),而非从本地加载一个视频
1 // QString file = QFileDialog::getOpenFileName(0, tr("Open a video")); 2 QString file = "rtmp://live.hkstv.hk.lxdns.com/live/hks";
再编译-运行,点击open即可打开香港位置的这个RTMP格式的直播流
相应的源代码和绿色版程序已经放在了我的仓库里:https://github.com/xuanli/qt-av-stream-player
Qt-AV其实已经完成了FQFlib所要开发的对RTMP和RSTP格式直播流播放的支持,而且根据目前的实际测试其并不能播放RTMP(也可能是我自己没写好)
但是在已经有轮子的情况下,不太建议FQFlib的作者继续重新造轮子
RTMP测试源:rtmp://live.hkstv.hk.lxdns.com/live/hks
RTSP测试源:rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov
HTTP和RTMP是直播流链接的格式,而直播流本身也有编码格式和封装格式。编码格式如h.264格式(也叫MPEG-4)等;封装格式则为MP4、WMV、FLV等。具体可以在推流时使用不同的ffmpeg参数进行设置。
H.264的维基网络介绍:
H.264,又称为MPEG-4第10部分,高级视频编码(英语:MPEG-4 Part 10, Advanced Video Coding,缩写为MPEG-4 AVC)是一种面向块,基于运动补偿的视频编码标准(英语:Video_coding_format) 。
MP4和MPEG4并不同:参考自:Difference between MPEG4 and MP4
综合来说,Qt-AV给我留下的印象最好,其经过了6个年头的发展,也有了多次的版本迭代,已经较为完善。
如果您想要使用QT开发功能强大,支持播放“格式”众多且代码简单的播放器,非常推荐使用Qt-AV
‘陆’ 怎样VS2013下安装Qt5的插件
1、下载安装qt 2、安装完成后打开VS2013,可以看到菜单栏上多出了一个“QT5”选项。 3、单击上图红色标框中的“Qt options”,并在下图中配置其环境变量。 变量名:VS2013_QT 路径:F:\Qt\Qt5.3.0\5.3\msvc2013_64_opengl(QT5的安装目录) 4、完成目上步操作后即可在VS2013中新建QT项目,例如新建“QTEST”。 当编译时会出现如下错误: Qt5Widgetsd.lib(Qt5Widgetsd.dll) : fatal error LNK1112: 模块计算机类型“x64”与目标计算机类型“X86”冲突 5、右击QTEST项目,选择“属性”---“链接器”--“高级”---“目标计算机”,更改目标计算机为MachineX64 (/MACHINE:X64),并把平台改成“活动(x64)”。 接下来继续配置QT5插件,单击下图中的QT工程设置把版本改为VS2013_QT5 再次编译即可成功运行。
‘柒’ Qt5怎么知道我用的那个编译器
左边kit里面有选择,然后就是编辑界面,左边有个工程工具。点击后进去就可以看出你选择的是哪一个了。