zoukankan      html  css  js  c++  java
  • manjaro + kde 使用过程中问题记录及解决方法

    前言:使用manjaro的经历:2020/11月中旬时,我被自己很差的电脑搞得心态爆炸,开机要5分钟,只是开个pycharm编辑器+网页电脑就开始卡屏,于是就决定购买新电脑。在新电脑还没到货的情况下,想给旧电脑做做好玩的事情,刚好今年我们上linux实验课,同时有了解到manjaro这个linux发行版,所以我给自己的旧电脑安装了manjaro+kde;这次操作系统更换着实给了我惊喜,原来使用win10那么卡慢的电脑,在这个新操作系统下有明显的流畅提升,至少同时开6个应用程序也比原来开2个要快,并且kde这个精美可定制的桌面环境我也很喜欢。于是我入坑了manjaro,希望自己在使用这个操作系统的过程中同时学好linux。

    但是,我还是个linux菜鸟,在使用过程中会遇到各种各样的问题。于是我决定把这些问题和解决方法记录下来,一来方便我将来再出现同样的问题可以快速查看,二来帮助同样在使用manjaro的人们。

    vscode中C++多文件编译

    问题:在vscode中,在默认情况下,按F5后只能编译当前文件,无法编译多个文件。
    解决:举个例子

    在~/code/C++/learn中新建的一下3个文件

    //main.cpp
    #include "a.h"
    #include <iostream>
    
    int  main(){
    	func();
    	std::cout << 'a' << std::endl;
    	return 0;
    }
    
    //a.cpp
    #include <iostream>
    #include "a.h"
    
    void func(){
        std::cout << "Hello World!" << std::endl; 
    }
    
    
    //a.h
    #ifndef _A_H_
    #define _A_H_
    
    extern void func();
    
    #endif
    

    如果我们在某一个文件按F5就会出错,那该怎么办了,我们需要编写Makefile文件,launch.json文件,task.json文件。

    Makefile

    src = main.cpp a.cpp
    learn: $(src) a.h
    	g++ -g $(src) -o learn
    clean:
    	rm learn 
    

    tasks.json

    {
        "tasks": [
            {
                "type": "shell",
                "label": "make build active file",
                "command": "/usr/bin/make",
                "args": [
                    "-C",
                    "${workspaceFolder}"
                ]
            }
        ],
        "version": "2.0.0"
    }
    

    launch.json

    {
        "version": "0.2.0",
        "configurations": [
            {
                "name": "g++ - 生成和调试活动文件",
                "type": "cppdbg",
                "request": "launch",
                "program": "${workspaceFolder}/${workspaceRootFolderName}",
                "args": [],
                "stopAtEntry": false,
                "cwd": "${workspaceFolder}",
                "environment": [],
                "externalConsole": false,
                "MIMode": "gdb",
                "setupCommands": [
                    {
                        "description": "为 gdb 启用整齐打印",
                        "text": "-enable-pretty-printing",
                        "ignoreFailures": true
                    }
                ],
                "preLaunchTask": "make build active file",
                "miDebuggerPath": "/usr/bin/gdb"
            }
        ]
    }
    

    json文件放入~/code/C++/learn/.vscode中

    这时候你在点击F5就会进入调试。

    ok,这就完成了吗,当然不是,上面的json文件是通用的,但是Makefile不是,不同的项目编写的内容不同,并且对于复杂的项目,Makefile的编写很麻烦,甚至你可能写不出来;众所周知,人是懒惰的, 有人就发明了qmake来自动生产Makefile。

    下面来介绍qmake的使用:

    qmake安装 (qmake是Qt自带的)
    先进入程序目录:

    然后输入

    你会发现生成了 文件夹名.pro 文件

    最后输入

    你会发现生成了 Makefile文件

    然后和上面介绍的操作即可(就是写好两个json文件)

    vscode中Qt的配置

    问题:如何在vs中使用Qt呢?
    解决:
    首先安装好Qt

    查看自己qt库在哪里,一般在/usr/include/qt中

    在~/code/C++/test中创建3个文件
    main.cpp

    #include <QApplication>
    #include "dialog.h"
    
    int main(int argc, char *argv[])
    {
      QApplication a(argc, argv);
    
      Dialog dialog;
      dialog.show();
    
      return a.exec();
    }
    

    dialog.h

    #ifndef _MAIN_DIALOG_
    #define _MAIN_DIALOG_
    
    #include <QDialog>
    #include <QLabel>
    
    
    
    class Dialog : public QDialog
    {
      Q_OBJECT
    
    public:
      Dialog(QWidget *parent = 0);
      ~Dialog();
    
    private:
      QLabel *label_test;
    };
    
    #endif
    

    dialog.cpp

    #include <QtWidgets>
    #include "dialog.h"
    
    Dialog::Dialog(QWidget *parent) : QDialog(parent)
    {
      this->setWindowTitle("hello");
    
      label_test = new QLabel(this);
      label_test->setText("HelloWorld");
    
      QGridLayout *main_layout = new QGridLayout(this);
      main_layout->addWidget(label_test, 0, 0);
    }
    
    Dialog::~Dialog()
    {
    }
    

    编写c_cpp_properties.json, launch.json, task.json文件,后两个文件和前面内容一致。

    c_cpp_properties.json

    {
        "configurations": [
            {
                "name": "gcc-64",
                "intelliSenseMode": "gcc-x64",
                "includePath": [
                    "/usr/include/qt",
                    "/usr/include/qt/QtCore",
                    "/usr/include/qt/QtGui",
                    "/usr/include/qt/QtWidgets",
                    "${workspaceRoot}"
                ],
                "browse":{
                    "path":[
                        "/usr/include/qt",
                        "/usr/include/qt/QtCore",
                        "/usr/include/qt/QtGui",
                        "/usr/include/qt/QtWidgets",
                        "${workspaceRoot}"
                    ]
                },
                "compilerPath": "/usr/bin/g++",
                "cStandard": "c11",
                "cppStandard": "c++17"
            }
        ],
        "version": 4
    }
    

    其中"includePath"和"path”内容一致,为qt库所在位置。

    编写完成后目录内容为:

    然后输入qmake -project
    你会发现生成了test.pro文件,我们要修改这个文件,在第一行添加

    QT += gui core widgets
    

    然后输入qmake
    你会发现生成了Makefile文件
    最后在vscode按F5就可以运行。

    linux中程序的打包发布(这里以打包QT程序为例)

    首先,运行程序得到了parse这个可执行程序,将这个程序xxx放置与新文件夹~/qwer中;

    接着向~/qwer文件夹中添加pack.sh和parse.sh这两个脚本,脚本内容具体如下:

    pack.sh

    #!/bin/sh  
    exe="parse" #你需要发布的程序名称
    des="/home/shuojia/qwer" #创建文件夹的位置
    deplist=$(ldd $exe | awk  '{if (match($3,"/")){ printf("%s "),$3 } }')  
    cp $deplist $des
    

    其中注意exe=“parse”,等号右边具体的内容由你的执行文件名字决定。

    parse.sh

    #!/bin/sh  
    appname=`basename $0 | sed s,.sh$,,`  
    dirname=`dirname $0`  
    tmp="${dirname#?}"  
    if [ "${dirname%$tmp}" != "/" ]; then  
    dirname=$PWD/$dirname  
    fi  
    LD_LIBRARY_PATH=$dirname  
    export LD_LIBRARY_PATH  
    $dirname/$appname "$@"
    

    该文件的命名也由可执行文件决定,即 可执行文件名.sh

    然后执行pack.sh脚本,他就会把运行该程序所需要的所有依赖放入~/qwer文件夹中。

    最后你就可以把这个文件夹打包发送给其他人来运行了

    root权限的获取和退出

    获取root权限

    (1)输入命令su

    (2)在输入正确的密码

    退出root权限

    输入命令exit

    pip安装时速度过慢问题

    pip安装库文件时,默认使用国外的源,由于国内原因,速度当然不快,
    好在国内提供了各种镜像。

    (1)阿里云http://mirrors.aliyun.com/pypi/simple/

    (2)豆瓣http://pypi.douban.com/simple/

    (3)清华大学https://pypi.tuna.tsinghua.edu.cn/simple/

    (4)中国科学技术大学http://pypi.mirrors.ustc.edu.cn/simple/

    (5)华中科技大学http://pypi.hustunique.com/

    下面用一个例子展示对国内源的使用

    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ jieba
    

    移动文件

    移动多个文件

    mv [-fiu] source destination
    -f: force强制新移动,会覆盖同名文件
    -i: 遇到同名文件会询问
    -u: 遇到同名文件会查看新旧,若源文件更新,则更新
    例子:
    移动/usr/file文件到/bin中并以file2命名

    mv -f /usr/file /bin/file2
    

    移动/usr/file文件到/bin目录下

    mv -f /usr/file /bin
    

    同时移动多个文件到制定目录下

    mv source1, source2,... director
    例子:

    mv file1, file2, file3 /usr
    

    杀死进程

    问题:linux的wps有个bug,在复制公式的时候wps会卡住,无法通过图像操作关掉
    解决:
    (1)输入top命令在查看当前正在运行的进程

    这里我们注意进程号和commad(执行程序的名称)这两个部分,比如进程号8084对应的commad为net-ease-cloud-m(网易云音乐)
    (2)下面通过输入kill -9 进程号就可以杀死该进程,例如,我想关系网易云音乐,就输入kill -9 8084即可

    python版本切换

    问题:manjaro的包管理只能维护python2和python3各一个版本(一般为最新),但是如果我想要在不同python3版本切换(比如pyhon3.8.6和python3.5.6之间),就没办法实现。
    解决:使用pyenv工具

    安装步骤

    • 下载(有两种下载方法)
    1. git clone https://github.com/pyenv/pyenv ~/.pyenv
    2. sudo pacman -S pyenv
      推荐使用第二种
    • 环境配置
      分别输入以下命令
    echo 'export PATH=~/.pyenv/bin:$PATH' >> ~/.bashrc
    echo 'export PYENV_ROOT=~/.pyenv' >> ~/.bashrc
    echo 'eval "$(pyenv init -)"' >> ~/.bashrc
    echo -e 'if command -v pyenv 1>/dev/null 2>&1; then
      eval "$(pyenv init -)"
    fi' >> ~/.bashrc
    

    需要注意的是,如果你不是使用bash作为默认shell,.bashrc需要替换。比如我使用zsh,所以需要替换为.zshrc

    • 激活
      输入下面的命令source ~/.bashrc,同理,.bashrc也需要根据的默认shell来替换
    • 安装python
      输入命令pyenv install --list来查看可以安装的python版本
      输入命令pyenv install 版本号就可以安装python,如pyenv install 3.6.4
    • 卸载python
      输入命令pyenv uninstall 版本号即可
    • 选择python版本
      在某一个目录下输入命令pyenv local 版本号,就可以指定当前目录下的python版本,如果你想使用系统自带的版本的话,可以输入pyenv local system

    使用总结

    一般情况下使用设置pyenv local system使用系统自带的python版本(最新版),如果有特殊情况需要使用其他版本,就pyenv install 需要的版本号,再pyenv local 需要的版本号

  • 相关阅读:
    POJ2142:The Balance——题解
    POJ1061:青蛙的约会——题解
    接口测试结束后的小结
    接口测试结束后的小结
    如何进行需求测试/需求评审
    如何进行需求测试/需求评审
    测试人员掌握代码的重要性
    测试人员掌握代码的重要性
    测试人员掌握代码的重要性
    软件自动化测试开发-开班啦
  • 原文地址:https://www.cnblogs.com/Serenaxy/p/14052013.html
Copyright © 2011-2022 走看看