首页| 论坛| 消息
主题:Qt开发经验小技巧216-220
liudianwu发表于 2022-05-21 09:20
216. Qt的网络库支持udp广播搜索和组播搜索,其中组播搜索可以跨网段搜索,有时候你会发现失灵,此时你可以尝试把本地的虚拟机的网卡禁用试试,估计就好了。还有就是在本地开启了代理啥的,先关掉试试。近期在使用tcpsocket连接的时候,发现在Qt4和Qt5中正常的程序,到了Qt6中就不行了,报错提示 The proxy type is invalid for this operation ,原来是本地设置了代理导致的,可能在Qt6以前会默认跳过去不处理。
```cpp
//也可以通过代码设置跳过代理
#include
QNetworkProxyFactory::setUseSystemConfiguration(false);
//下面这样每次设置也可以
tcpSocket->setProxy(QNetworkProxy::NoProxy);
//查阅到文章 https://www.cnblogs.com/cppskill/p/11730452.html
//从5.8开始socket默认代理类型是DefaultProxy而不是NoProxy,不知道出于什么考虑。
```
217. 关于交叉编译,对于初学者来说是个极难跨过去的砍(一旦跨过去了,以后遇到需要交叉编译的时候都是顺水推舟、信手拈来。),因为需要搭建交叉编译环境,好在现在厂家提供的板子基本上都是测试好的环境,尤其是提供的编译器,不用自己再去折腾,按照官方手册来基本上不会有啥的的问题。
- 在linux系统上编译ffmpeg和qt都是非常简单的事情,初学者也会,前提只要本地的gcc g++编译器正常。
- 任何编译器包括嵌入式编译器,为了确保环境正常,你可以先查看对应的编译器版本是否ok,g++ -varm-linux-g++ -v。
- 交叉编译器查看版本 /opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-g++ -v 。
- 编译器位数和操作系统位数有关,一般32位的编译器要在32位的系统上做交叉编译,虽然32位也可以在安装依赖后,在64位系统做交叉编译,但是个人不建议,可能会出问题。64位的编译器只能在64位的系统。
- 设置了环境变量则可以省略掉长长的路径,直接打可执行文件名称即可,没有设置环境变量则需要打完整路径。
- 设置环境变量只是为了编译的时候让自动寻找编译器,其实也完全可以不用设置环境变量,使用绝对路径指定编译器位置即可。
- 在linux上编译,无论是ffmpeg还是qt还是其他,都是通用的步骤,第一步:./configure第二步:make第三步:make install 。
- 至于具体configure后面有哪些参数,参照对应源码包的手册就行,搜索也一大堆。当然你用默认的就不带任何参数一般也可以,自动采用默认参数进行编译。
- 交叉编译ffmpeg命令:./configure --prefix=host --enable-static --disable-shared --disable-doc --cross-prefix=/opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux- --arch=arm --target-os=linux
- 交叉编译qt前提:修改mkspecs/qws/linux-arm-g++下面的qmake.conf,如果没有设置环境变量则设置对应编译器的绝对路径,并将编译器的名字改成你需要的。
- 比如修改gcc编译器:QMAKE_CC = /opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-gcc
- 交叉编译qt4.8.5命令:./configure -prefix host -embedded arm -xplatform qws/linux-arm-g++ -release -opensource -confirm-license -qt-sql-sqlite -qt-gfx-linuxfb -plugin-sql-sqlit -no-qt3support -no-phonon -no-svg -no-webkit -no-javascript-jit -no-script -no-scripttools -no-declarative -no-declarative-debug -qt-zlib -no-gif -qt-libtiff -qt-libpng -no-libmng -qt-libjpeg -no-rpath -no-pch -no-3dnow -no-avx -no-neon -no-openssl -no-nis -no-cups -no-dbus -little-endian -qt-freetype -no-opengl -no-glib -nomake demos -nomake examples -nomake docs -nomake tools
- 交叉编译qt5.9.8命令:./configure -prefix host -xplatform linux-arm-g++ -recheck-all -opensource -confirm-license -optimized-qmake -release -no-separate-debug-info -strip -shared -static -c++std c++1z -no-sse2 -pch -compile-examples -gui -widgets -no-dbus -no-openssl -no-cups -no-opengl -linuxfb -qt-zlib -qt-libpng -qt-libjpeg -qt-freetype
- 综上所述交叉编译和常规的编译就一个区别,需要手动指定交叉编译器路径。ffmpeg是通过--cross-prefix=指定,qt比较庞大是通过更改配置文件最后通过-xplatform指定配置文件名称。
- Qt6的编译比较繁琐,默认用cmake编译,在linux上先用cmake3.19以上版本的源码,用make编译生成cmake,然后再用cmake编译qt生成qmake,最后调用qmake来编译你的qt项目。
- 编译Qt其实只是想用其中的库,至于demo、doc、tool、example等统统不用,费时费力。所以强烈建议编译的时候去掉,大大加快编译速度。
- 编译建议用普通用户编译即可,包括解压源码,因为这样编译出来的库普通用户就能用,如果是root管理员编译的则以后都需要管理员权限才行。
- 很多系统都提供了直接鼠标右键解压,其实也是可以的,就是速度慢,建议用
下一页 (1/3)
回帖(0):

全部回帖(0)»
最新回帖
收藏本帖
发新帖