Ubuntu系统操作
制作镜像软件
rufus-4.9p.exe
下载地址:https://rufus.ie/downloads/
说明书:https://rufus.ie/zh/
镜像地址
https://mirrors.aliyun.com/ubuntu-releases/22.04/
https://mirrors.aliyun.com/ubuntu-releases/24.04.2/?spm=a2c6h.25603864.0.0.2b8c4ddad1dR3Q
分区建议
单系统无需设置,若已经存在win系统,需要在另一个磁盘上安装ubuntu,则需要该步骤
简易模式
参考:
image.png
实际空间分配,单独安装在一个独立的2T硬盘上
| /boot |
Exj4 逻辑分区 |
1024MB |
| /tmp |
Exj4 逻辑分区 |
4096MB |
| / |
Exj4 主分区 |
102400MB(100GB) |
| /home |
Exj4 逻辑分区 |
819200MB(800GB) |
失败记录
自定义分区配置只有efi分区无boot分区时,在安装时报错:执行‘grub-install/dev/nvmeOn1p5‘失败。这是一个致命错误。
,unable to install grub in /dev/nvme0n1
thinkbook 16+
安装20.04版本ubuntu一直安装不上wifi,尝试过内核更新过也无效,后续换成22.04
ref:
https://cloud.tencent.com/developer/article/2062320
https://blog.csdn.net/NeoZng/article/details/122779035
https://blog.csdn.net/wxd1233/article/details/120335134
字体太小眼睛要瞎了
安装 gnome
sudo apt install gnome-tweaks
打开gnome-tweak-tool。
在左侧菜单中选择“字体”,然后你可以调整字体大小。
配置搜狗输入法:https://shurufa.sogou.com/linux/guide
终端样式
https://www.haoyep.com/posts/zsh-config-oh-my-zsh/
连接到局域网内的win主机
smb://服务器ip地址
qt配置
Win
vs转qt工程
右键vs项目,找到Create Basic .pro File
image.png
若没有找到,则安装 LEGACY Qt Visual Studio Tools 与 Qt VSCMake
Tools,同时禁用原先的Qt Visual Studio Tools
image.png
vs
插件卸掉了安装不上的问题,去安装目录C:\Users\Administrator\AppData\Local\Microsoft\VisualStudio\16.0_ad6ec444\Extensions下找到对应的文件夹删干净就行
https://blog.csdn.net/Kepler11/article/details/120229355
Ubuntu
sudo apt-get install gcc g++ clang
sudo apt-get install build-essential qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools
sudo apt-get install **qtbase5-examples** qtcreator
Opencv环境
非源码编译
sudo apt-get install libopencv-dev libopencv-contrib-dev
检查是否安装成功
1 2 3 4 5 6 7 8 9 10 11 12 13
| ❯ apt-cache policy libopencv-dev libopencv-dev: 已安装:4.5.4+dfsg-9ubuntu4 候选: 4.5.4+dfsg-9ubuntu4 版本列表: *** 4.5.4+dfsg-9ubuntu4 500 500 http://cn.archive.ubuntu.com/ubuntu jammy/universe amd64 Packages 100 /var/lib/dpkg/status
❯ pkg-config --libs opencv4 -lopencv_stitching -lopencv_alphamat -lopencv_aruco -lopencv_barcode -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_dpm -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hdf -lopencv_hfs -lopencv_img_hash -lopencv_intensity_transform -lopencv_line_descriptor -lopencv_mcc -lopencv_quality -lopencv_rapid -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_shape -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_optflow -lopencv_surface_matching -lopencv_tracking -lopencv_highgui -lopencv_datasets -lopencv_text -lopencv_plot -lopencv_ml -lopencv_videostab -lopencv_videoio -lopencv_viz -lopencv_wechat_qrcode -lopencv_ximgproc -lopencv_video -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_dnn -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_imgproc -lopencv_core
|
自定义SO载入失败:ubuntu只带SO名字,没加绝对路径时,在/usr/lib下加载,而不是类似win在程序运行目录下加载,需要绝对路径
static QLibrary flawDll(_exePath2+"/libFlawDetect.so");
源码编译
todo
demo工程
新建一个新的pro
image.png
1 2 3 4 5 6 7 8 9 10 11 12 13
| QT += core gui
INCLUDEPATH += /usr/include \ /usr/include/opencv4 \ /usr/include/opencv4/opencv2
LIBS += -L/usr/lib/x86_64-linux-gnu -lopencv_stitching -lopencv_alphamat -lopencv_aruco -lopencv_barcode -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_dpm -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hdf -lopencv_hfs -lopencv_img_hash -lopencv_intensity_transform -lopencv_line_descriptor -lopencv_mcc -lopencv_quality -lopencv_rapid -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_shape -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_optflow -lopencv_surface_matching -lopencv_tracking -lopencv_highgui -lopencv_datasets -lopencv_text -lopencv_plot -lopencv_ml -lopencv_videostab -lopencv_videoio -lopencv_viz -lopencv_wechat_qrcode -lopencv_ximgproc -lopencv_video -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_dnn -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_imgproc -lopencv_core
CONFIG += c++14
SOURCES += \ mainRun.cpp
|
新建一个测试cpp,若能显示图像则环境配置成功
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #include <iostream> #include <opencv2/opencv.hpp>
using namespace std; using namespace cv;
int main(int agrc, char** agrv) { Mat img=imread("/home/lcq/Code/images/RFID.bmp"); imshow("test",img); waitKey(0); return 0; }
|
1、遇到错误 libprotobuf.so.23: error adding symbols: DSO missing from
command line
重新安装libprotobuf-dev:sudo apt-get install --reinstall libprotobuf-dev
**2、解决 undefined reference to
cv::imread(std::__cxx11::basic_string<char,
std::char_traits<char>,....**
修改*.pri内链接opencv库的方式
1 2 3 4 5 6
| LIBS += -L/usr/lib/x86_64-linux-gnu/libopencv_*
LIBS += -L/usr/lib/x86_64-linux-gnu -lopencv_stitching -lopencv_alphamat -lopencv_aruco -lopencv_barcode -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_dpm -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hdf -lopencv_hfs -lopencv_img_hash -lopencv_intensity_transform -lopencv_line_descriptor -lopencv_mcc -lopencv_quality -lopencv_rapid -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_shape -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_optflow -lopencv_surface_matching -lopencv_tracking -lopencv_highgui -lopencv_datasets -lopencv_text -lopencv_plot -lopencv_ml -lopencv_videostab -lopencv_videoio -lopencv_viz -lopencv_wechat_qrcode -lopencv_ximgproc -lopencv_video -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_dnn -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_imgproc -lopencv_core
|
3、依赖问题
若库安装的位置不在/usr/local/lib
(相当于win中C:\Windows\System32)内,则需要将库软链接到运行程序目录下,或者在/etc/ld.so.conf.d/libc.conf
(相当于win中环境变量配置)内加入编译库的位置;
https://blog.csdn.net/weixin_44796670/article/details/115900538
cmake+qt配置opencvhttps://zhuanlan.zhihu.com/p/681817070
qmake语法
.pro工程文件包含qmake构建应用、库、插件的所有必须信息。
1 2 3 4 5 6 7 8 9 10 11
| HEADERS += ./flawDetect.h \ ./flawdetect_global.h \ ./resource.h \ ./_contours.h SOURCES += ./flawDetect.cpp \ ./_contours.cpp
QT += core gui widgets CONFIG += c++17 DEFINES += QTCBuild DEFINES += BUILD_STATIC
|
常用简介
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
| 136、QMAKE_POST_LINK
指定将 TARGET 链接在一起后要执行的命令。这个变量也不是 mally 为空,因此不执行任何操作。注意:这个变量对 Xcode 项目没有影响。 c常配合拷贝语句使用 SrcPath = $$DESTDIR/libFlawDetect* DstPath = $$PWD/../Common/flaw/$$complied/ QMAKE_POST_LINK += $$QMAKE_COPY $$SrcPath $$DstPath
137、QMAKE_PRE_LINK
指定在将 TARGET 链接在一起之前要执行的命令。此变量通常为空,因此不会执行任何操作。注意:这个变量对 Xcode 项目没有影响。
35、LIBS
指定要链接到项目中的库列表。如果使用 Unix -l(库)和 -L(库路径)标志,qmake 会在 Windows 上正确处理库(即,将库的完整路径传递给链接器)。 该库必须存在以便 qmake 找到 -l lib 所在的目录。
如:
unix:LIBS += -L/usr/local/lib -lmath
win32:LIBS += c:/mylibs/math.lib
18、DEFINES
qmake 将此变量的值添加为编译器 C 预处理器宏。
17、CONFIG
指定项目配置和编译器选项。这些值由 qmake 内部识别并具有特殊含义。
以下 CONFIG 值控制编译器和链接器标志:
release:项目在发布模式下构建。如果还指定了 debug,则最后一个生效。
debug:项目在调试模式下构建。
debug_and_release:项目在调试和发布模式下构建。
debug_and_release_target:此选项是默认设置的。如果还设置了 debug_and_release,则 debug 和 release 构建最终位于单独的 debug 和 release 目录中。
build_all:如果指定了 debug_and_release,则默认以debug 和release 两种模式构建项目。
若不手动控制,自动跟着左下角的项目构建方式决定debug or release
precompile_header:支持在项目中使用预编译头。
precompile_header_c:(仅限 MSVC)支持使用 C 文件的预编译头。
warn_on:编译器应该输出尽可能多的警告。如果同时指定了warn_off,则最后一个生效。
warn_off:编译器应该尽可能少地输出警告。
exceptions:启用异常支持。默认设置。
exceptions_off:禁用异常支持。
ltcg:启用链接时间代码生成。 此选项默认关闭。
rtti:启用 RTTI 支持。默认情况下,使用编译器默认值。
rtti_off:禁用RTTI 支持。默认情况下,使用编译器默认值。
stl:启用STL 支持。默认情况下,使用编译器默认值。
stl_off:禁用STL 支持。默认情况下,使用编译器默认值。
thread:启用线程支持。当 CONFIG 包含 qt 时启用此功能,这是默认设置。
strict_c:禁用对 C 编译器扩展的支持。 默认情况下,处于启用状态。
c++11:启用 C++11 支持。如果编译器不支持 C++11 或无法选择 C++ 标准,则此选项无效。默认情况下,支持处于启用状态。
c++14:启用 C++14 支持。如果编译器不支持 C++14 或无法选择 C++ 标准,则此选项无效。默认情况下,支持处于启用状态。
c++17:启用 C++17 支持。如果编译器不支持 C++17 或无法选择 C++ 标准,则此选项无效。默认情况下,支持处于启用状态。
c++20:启用 C++20 支持。如果编译器不支持 C++20 或无法选择 C++ 标准,则此选项无效。默认情况下,支持处于禁用状态。
c++latest:启用对编译器支持的最新 C++ 语言标准的支持。 默认情况下,此选项处于禁用状态。
strict_c++:禁用对 C++ 编译器扩展的支持。默认情况下,处于启用状态。
depend_includepath:将 INCLUDEPATH 的值附加到 DEPENDPATH 。默认启用设置。
以下选项定义应用程序或库类型:
qt:目标是 Qt 应用程序或库,需要 Qt 库和头文件。Qt 库的正确包含和库路径将自动添加到项目中。这是默认定义的。
x11:目标是 X11 应用程序或库。正确的包含路径和库将自动添加到项目中。
windows:目标是一个 Win32 窗口应用程序。正确的包含路径、编译器标志和库将自动添加到项目中。
console:目标是一个 Win32 控制台应用程序。正确的包含路径、编译器标志和库将自动添加到项目中。
cmdline:目标是一个跨平台的命令行应用程序。在 Windows 上,这意味着 CONFIG += console。在 macOS 上,这意味着 CONFIG -= app_bundle。
shared、dll:目标是共享对象/DLL。 正确的包含路径、编译器标志和库将自动添加到项目中。dll也可以在所有平台上使用。将创建具有目标平台(.dll 或 .so)的适当后缀的共享库文件。
static、staticlib:目标是一个静态库(仅限 lib)。正确的编译器标志将自动添加到项目中。
plugin:目标是一个插件(仅限 lib)。 这也启用了 dll。
designer:目标是 Qt Designer 的插件。
这些选项仅定义 Windows 上的特定功能:
flat:当使用 vcapp 模板时,这会将所有源文件放入源组并将头文件放入头组,而不管它们驻留在哪个目录中。关闭此选项将根据目录对源/头组中的文件进行分组放置。这是默认开启的。
embed_manifest_dll:在作为库项目一部分创建的 DLL 中嵌入清单文件。
embed_manifest_exe:在作为应用程序项目的一部分创建的 EXE 中嵌入清单文件。
以下选项仅在 Linux/Unix 平台上生效:
largefile:包括对大文件的支持。
separate_debug_info:将库的调试信息放在单独的文件中。
|
qmake中使用的宏在文件
C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\spec_post.prf
里定义具体实现方式,截取部分如:
image.png
更多查看:
https://olimiya.github.io/posts/qmake%E4%B8%AD%E5%AE%9E%E7%8E%B0%E6%8B%B7%E8%B4%9D%E6%96%87%E4%BB%B6/
https://doc.qt.io/archives/qt-5.15/qmake-variable-reference.html
https://www.cnblogs.com/iriczhao/p/11274598.html
https://qthub.com/static/doc/qmlbook/cn/qt_and_c++/qmake.html
CMake语法
cmake区分不同系统
1 2 3 4 5 6 7 8 9 10 11
| if(CMAKE_SYSTEM_NAME STREQUAL "Linux") message(STATUS "Configuring on/for Linux") elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin") message(STATUS "Configuring on/for macOS") elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows") message(STATUS "Configuring on/for Windows") elseif(CMAKE_SYSTEM_NAME STREQUAL "AIX") message(STATUS "Configuring on/for IBM AIX") else() message(STATUS "Configuring on/for ${CMAKE_SYSTEM_NAME}") endif()
|
todo
预定义宏
通过宏定义区分系统与编译器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| #if _MSC_VER >=1900 #ifdef _DEBUG #pragma comment(lib,"opencv_world455d.lib") #else #pragma comment(lib,"opencv_world455.lib") #endif #endif
#ifdef __ANDROID__ string port("/dev/ttyUSB1"); #elif __linux__ string port("/dev/ttyUSB0"); #elif _WIN32 string port("Com3"); #endif
#ifdef _MSC_VER cout << "hello MSVC" << endl; #elif __GNUC__ cout << "hello gcc" << endl; #elif __BORLANDC__ cout << "hello Borland c++" << endl; #endif
|
https://learn.microsoft.com/zh-cn/cpp/preprocessor/predefined-macros?view=msvc-170
安装企业微信等win应用
套壳安装
1 2 3 4 5 6 7 8
| wget -O- https:
sudo apt-get install com.qq.weixin.work.deepin
sudo apt-get install com.qq.im.deepin
|
• 完整列表参见 https://deepin-wine.i-m.dev
ref:https://github.com/zq1997/deepin-wine
错误记录:
symbol lookup error
则作为dll调用时会报错:App
path:/home/lcq/Code/FlawDetect/x64/Debug/home/lcq/Code/FlawDetect/build-useFlawDetect-unknown-Debug/../x64/Debug/useFlawDetect:
symbol lookup error:
/home/lcq/Code/FlawDetect/x64/Debug/libFlawDetect.so: undefined symbol:
_ZN3tbb6detail2r120isolate_within_arenaERNS0_2d113delegate_baseEl
1 2 3
| ❯ c++filt _ZN3tbb6detail2r120isolate_within_arenaERNS0_2d113delegate_baseEl
tbb::detail::r1::isolate_within_arena(tbb::detail::d1::delegate_base&, long)
|
分析出是tbb庫,需要在qmake中加入 LIBS += -ltbb
常用指令
筛选特定的包
apt list --installed | grep "opencv"