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\n  eval "$(pyenv init -)"\nfi' >> ~/.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 需要的版本號


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM