主頁 > 移動端開發 > linux軟體包管理-原始碼編譯

linux軟體包管理-原始碼編譯

2020-10-27 22:54:32 移動端開發

linux的進階篇

文章目錄

  • linux的進階篇
    • 一,原始碼包的基本描述
    • 二,原始碼包的優點
    • 三,原始碼包的獲取方式
    • 四,原始碼包分類
    • 五, 原始碼包的安裝
      • 5.1 configure腳本的功能
      • 5.2 編譯安裝注意事項
      • 5.3 原始碼包編譯實體
      • 5.4原始碼編譯報錯資訊處理
      • 5.5原始碼編譯安裝之-Nginx
        • 1,準備原始碼包及資料檔案,
        • 2,檔案資料準備好后開始進行編譯的三部曲
      • 5.6,原始碼編譯安裝之-Apache
        • 1,準備原始碼包及資料檔案,
        • 2,檔案資料準備好后開始進行編譯的三部曲

一,原始碼包的基本描述

  • 在linux環境下面安裝原始碼包是比較常見的, 早期運維管理作業中,大部分軟體都是通過原始碼安裝的,那么安裝一個原始碼包,是需要我們自己把源代碼編譯成二進制的可執行檔案,
  • 原始碼包的編譯用到了linux系統里的編譯器,通常原始碼包都是用C語言開發的,這也是因為C語言為linux上最標準的程式語言,Linux上的C語言編譯器叫做gcc,利用它就可以把C語言變成可執行的二進制檔案,所以如果你的機器上沒有安裝gcc就沒有辦法去編譯原始碼,可以使用yum -y install gcc來完成安裝,

二,原始碼包的優點

  • 1,自定義修改源代碼
  • 2,定制需要的相關功能
  • 3,新版軟體優先使用更新原始碼

三,原始碼包的獲取方式

  • 官方網站,獲取最新的軟體包
  • Apahce官方網站
  • Nginx官方網站
  • Mysql官方網站

四,原始碼包分類

  • 原始碼格式(需要編譯安裝)
  • 二進制格式(解壓后可以直接使用)

五, 原始碼包的安裝

  • 編譯需要編譯環境,開發環境,開發庫,開發工具,
    常用的編譯環境有c、c++、perl、java、python5種
    c環境的編譯器:gcc(GNU C Complier)
    c++環境的編譯器:g++

  • make(進行編譯的動作)編譯命令:c、c++的統一專案管理工具,編譯時有可能呼叫gcc也有可能呼叫g++,使用makefile檔案定義make按何種次序去編譯源程式檔案中的源程式

  • 原始碼安裝三部曲(常見):

    • 第一步: ./configure(定制組件)

      1.指定安裝路徑,例如 – prefix=/opt/nginx-1.12
      2.啟用或禁用某項功能, 例如 --enable-ssl
      3.和其它軟體關聯,例如–with-pcre
      4.檢查安裝環境,例如是否有編譯器 gcc,是否滿足軟體的依賴需求
      5.檢測通過后生成Makefile檔案

    • 第二步: make

      1.執行make命令進行編譯, 可以使用-j指定CPU核心數進行編譯
      2.按Makefile檔案進行編譯, 編譯成可執行二進制檔案
      3.生成各類模塊和主程式

    • 第三步: make install

      1.按Makefile定義好的路徑拷貝至安裝目錄中
      上面介紹的原始碼三部曲不能百分百通用于所有原始碼包, 也就是說原始碼包的安裝并非存在標準安裝步驟,但是大部分原始碼安裝都是類似的步驟
      建議:
      拿到原始碼包解壓后,然后進入到目錄找相關的幫助檔案,通常會以INSTALL或者README為檔案名

5.1 configure腳本的功能

  • 讓用戶選定編譯特性
  • 檢查編譯環境是否符合程式編譯的基本需要

5.2 編譯安裝注意事項

  • a,如果安裝時不是使用的默認路徑,則必須要修改PATH環境變數,以能夠識別此程式的二進制檔案路徑;
    修改/etc/profile檔案或在/etc/profile.d/目錄建立一個以.sh為后綴的檔案,在里面定義export PATH=$PATH:/path/to/somewhere

    • 增添環境變數,使得nginx原始碼包命令服務使用的更加方便,

      • 第一步:echo ‘export PATH=/usr/local/nginx/sbin:$PATH’ > /etc/profile.d/nginx.sh 將安裝的nginx目錄的nginx命令添加到環境變數中,使得我們提取命令時更加方便
      • 第二步:source /etc/profile.d/nginx.sh //將上面寫入的環境變數加入到系統的環境變數中
      • 第三步:echo $PATH //查看當前的環境變數
      • 第四步:nginx 運行命令
      • 第五步:Ss -antl 查看系統偵聽的埠,相應服務啟動的埠是否正在被偵聽,
  • b,默認情況下,系統搜索庫檔案的路徑只有/lib,/usr/lib

    • 增添額外庫檔案搜索路徑方法:

      在/etc/ld.so.conf.d/中創建以.conf為后綴名的檔案,而后把要增添的路徑直接寫至此檔案中,此時庫檔案增添的搜索路徑重啟后有效,若要使用增添的路徑立即生效則要使用ldconfig命令

      • ldconfig:通知系統重新搜索庫檔案

        在這里插入圖片描述

      • /etc/ld.so.conf和/etc/ls.so.conf.d/*.conf //組態檔

      • /etc/ld.so.cache //快取檔案
        -v //顯示重新搜索庫的程序
        -p //列印出系統啟動時自動加載并快取到記憶體中的可用庫檔案名及檔案路徑映射關系

  • c,頭檔案:輸出給系統
    默認:系統在/usr/include中找頭檔案,若要增添頭檔案搜索路徑,使用鏈接進行
    man檔案路徑:安裝在–prefix指定的目錄下的man目錄

    • 通過鏈接生成頭檔案鏈接,
      在這里插入圖片描述
    • 默認:系統在/usr/share/man中找man檔案,此時因為編譯安裝的時候不是安裝到默認路徑下,如果要查找man檔案則可以使用以下兩種方法:
      man -M /path/to/man_dir command
      在/etc/man_db.conf檔案中添加一條MANPATH
      #

5.3 原始碼包編譯實體

  • 下面通過編譯安裝nginx來深入理解原始碼包安裝
    • //1.基礎環境準備 [root@localhost ~]# yum -y install gcc gcc-c++ make wget

    • //2.下載原始碼包(原始碼包一定要上官方站點下載,其他站點不安全) [root@localhost ~]# cd /usr/src
      [root@localhost src]# wget http://nginx.org/download/nginx-1.12.2.tar.gz

    • //3.解壓原始碼包,并進入相應目錄 [root@localhost src]# tar xf nginx-1.12.2.tar.gz
      [root@localhost src]# cd nginx-1.12.2

    • //4.配置相關的選項,并生成Makefile [root@localhost nginx-1.12.2]# ./configure --help|head

      help選項:

–helpprint this message
–prefix=PATHset installation prefix
–sbin-path=PATHset nginx binary pathname
–modules-path=PATHset modules path
–conf-path=PATHset nginx.conf pathname
–error-log-path=PATHset error log pathname
–pid-path=PATHset nginx.pid pathname
–lock-path=PATHset nginx.lock pathname

//后面的內容省略了,使用 ./configure --help 命令查看可以使用的選項
//一般常用的有 --prefix=PREFIX 這個選項的意思是定義軟體包安裝到哪里
//建議,原始碼包都是安裝在/opt/目錄下

  • //5.指定編譯引數 [root@localhost nginx-1.12.2]# ./configure --prefix=/opt/nginx-1.12.2
  • //6.驗證這一步命令是否成功, 非0的都不算成功 [root@localhost nginx-1.12.2]# echo $?
    0
  • //7.編譯并安裝 [root@localhost nginx-1.12.2]# make
    [root@localhost nginx-1.12.2]# make install
    [root@localhost nginx-1.12.2]# echo $?
  • //8.建立軟鏈接 [root@localhost nginx-1.12.2]# ln -s /opt/nginx-1.12.2 /opt/nginx

5.4原始碼編譯報錯資訊處理

  • error-1checking for C compiler … not found ./configure: error: C compiler cc is not found

    //解決方案
    [root@localhost ~]# yum -y install gcc gcc-c++ make

  • error-2./configure: error: the HTTP rewrite module requires the PCRE library.
    You can either disable the module by using --without-http_rewrite_module
    option, or install the PCRE library into the system, or build the PCRE library
    statically from the source with nginx by using --with-pcre= option.

    //解決方案
    [root@localhost ~]# yum install -y pcre-devel

  • error-3./configure: error: the HTTP gzip module requires the zlib library.
    You can either disable the module by using --without-
    http_gzip_module option, or install the zlib library into the
    system, or build the zlib library statically from the source with
    nginx by using --with-zlib= option.

    //解決方案:
    [root@localhost ~]# yum -y install zlib-devel

  • error-4./configure: error: SSL modules require the OpenSSL library.
    You can either do not enable the modules, or install the OpenSSL
    library into the system, or build the OpenSSL library statically
    from the source with nginx by using --with-openssl= option.

    //解決方案
    [root@localhost ~]# yum -y install openssl-devel

5.5原始碼編譯安裝之-Nginx

1,準備原始碼包及資料檔案,

  • 獲取方式,通過Nginx官網獲取
    Nginx
    在這里插入圖片描述
  • 下載需要的鏡像包
    • nginx-1.18.0
  • 在xshell下進行下載,

    [root@localhost ~]# wget http://103.95.217.6/nginx.org/download/nginx-1.18.0.tar.gz

  • 解壓檔案 tar -xf nginx-1.18.0.tar.gz

2,檔案資料準備好后開始進行編譯的三部曲

  • 我們首先需要安裝gcc的編譯器,通過命令dnf -y install gcc,否則后續的編譯檔案無法進行,

  • 1,運行configure組態檔,

    [root@localhost nginx-1.18.0]# ./configure --prefix=/usr/local/nginx

    • 運行后可能會提示這樣一個錯誤

    ./configure: error: the HTTP gzip module requires the zlib library.
    You can either disable the module by using --without-http_gzip_module
    option, or install the zlib library into the system, or build the zlib library
    statically from the source with nginx by using --with-zlib= option.

    • 解決方法:

    安裝zlib所需要的庫:dnf -y install zlib-devel

  • 2,運行make命令與make install安裝命令;

    安裝成功:在這里插入圖片描述

  • 3,運行命令,查看網頁,進入nginx的sbin目錄下,
    在這里插入圖片描述
    在這里插入圖片描述


5.6,原始碼編譯安裝之-Apache

1,準備原始碼包及資料檔案,

  • 獲取方式,通過apache官網獲取
    Apahce![]
  • 下載需要的三個鏡像檔案包:
    • httpd-2.4.46.tar.gz
    • apr-1.6.5.tar.bz2
    • apr-util-1.6.1.tar.bz2
  • 在xshell下進行下載,
    在這里插入圖片描述
  • 現將檔案都拷貝到/usr/local/src存放源檔案的目錄下:

    [root@localhost ~]# mv apr-1.6.5.tar.gz apr-util-1.6.1.tar.gz httpd-2.4.46.tar.gz /usr/local/

  • 然后在終端下解壓:tar -xf httpd-2.4.46.tar.gz (注意三個檔案都要下載,都要解壓)

2,檔案資料準備好后開始進行編譯的三部曲

  • 1,資料解壓完后應該看到這三個檔案夾,

    在這里插入圖片描述

  • 我們首先需要安裝gcc的編譯器,通過命令dnf -y install gcc,否則后續的編譯檔案無法進行,

  • 2,首先我們進入apr-1.6.5這個檔案夾中,進行編譯安裝;

    (注:如果不安裝這個apr代理,在編譯httpd中的./configure檔案時則會出現以下錯誤)
    Apache2.4報錯checking for APR… no configure: error: APR not found. Please read the documentation.
    所以需要進行編譯Apr代理

    • 編譯命令:

      ttar -zxf apr-1.6.5.tar.gz
      cd apr-1.6.5
      ./configure --prefix=/usr/local/apr
      make && make install

    • 編譯Apr會出現一個問題,在configure腳本檔案中定義了一個目錄,這個目錄變數需要注釋掉,否則出現以下錯誤:

      config.status: executing libtool commands
      rm: cannot remove ‘libtoolT’: No such file or directory

  • 3,其次我們在進行編譯時又會爆出apr-util的錯誤,所以我們又需要對apr-uitl進行編譯安裝:

    checking for APR-util… no
    configure: error: APR-util not found. Please read the documentation.

    • 編譯命令 (注,這個時候也會提示一個錯誤,)

      tar -zxf apr-util-1.3.12.tar.gz
      cd apr-util-1.3.12
      ./configure --prefix=/usr/local/apr-util -with-apr=/usr/local/apr/bin/apr
      make && make install

    • 提示錯誤,

      xml/apr_xml.c:35:10: 致命錯誤:expat.h:沒有那個檔案或目錄
      #include <expat.h>
      ^~~~~~~~~
      編譯中斷,
      make[1]: *** [/root/apr-util-1.6.1/build/rules.mk:206:xml/apr_xml.lo] 錯誤 1
      make[1]: 離開目錄“/root/apr-util-1.6.1”
      make: *** [/root/apr-util-1.6.1/build/rules.mk:118:all-recursive] 錯誤 1

    • 解決辦法:

      dnf -y install expat-devel安裝這個庫檔案,
      還可能會報出缺少pcre包,也是同樣的安裝pcre的包組,

  • 4,將apr和apr-util依賴包組安裝完成后,就開始我們的Apache的安裝了

    • 進入httpd目錄,進行組態檔的安裝:

      [root@localhost httpd-2.4.46]./configure --prefix=/usr/local/apache --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util
      [root@localhost httpd-2.4.46] make
      [root@localhost httpd-2.4.46] make install

    • 安裝完成后看到以下內容表示Apache已經安裝成功,
      在這里插入圖片描述
    • 進入[root@localhost httpd-2.4.46]# /usr/local/apache/bin/apachectl start啟動apache服務,
      然后瀏覽網頁,
    • 注意,無法訪問需要關閉防火墻和selinux的訪問控制,在這里插入圖片描述

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/194316.html

標籤:其他

上一篇:卸載與重裝Android studio

下一篇:pycharm如何連接遠程服務器的docker容器進行運行和除錯代碼(一)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【從零開始擼一個App】Dagger2

    Dagger2是一個IOC框架,一般用于Android平臺,第一次接觸的朋友,一定會被搞得暈頭轉向。它延續了Java平臺Spring框架代碼碎片化,注解滿天飛的傳統。嘗試將各處代碼片段串聯起來,理清思緒,真不是件容易的事。更不用說還有各版本細微的差別。 與Spring不同的是,Spring是通過反射 ......

    uj5u.com 2020-09-10 06:57:59 more
  • Flutter Weekly Issue 66

    新聞 Flutter 季度調研結果分享 教程 Flutter+FaaS一體化任務編排的思考與設計 詳解Dart中如何通過注解生成代碼 GitHub 用對了嗎?Flutter 團隊分享如何管理大型開源專案 插件 flutter-bubble-tab-indicator A Flutter librar ......

    uj5u.com 2020-09-10 06:58:52 more
  • Proguard 常用規則

    介紹 Proguard 入口,如何查看輸出,如何使用 keep 設定入口以及使用實體,如何配置壓縮,混淆,校驗等規則。

    ......

    uj5u.com 2020-09-10 06:59:00 more
  • Android 開發技術周報 Issue#292

    新聞 Android即將獲得類AirDrop功能:可向附近設備快速分享檔案 谷歌為安卓檔案管理應用引入可安全隱藏資料的Safe Folder功能 Android TV新主界面將顯示電影、電視節目和應用推薦內容 泄露的Android檔案暗示了傳說中的谷歌Pixel 5a與折疊屏新機 谷歌發布Andro ......

    uj5u.com 2020-09-10 07:00:37 more
  • AutoFitTextureView Error inflating class

    報錯: Binary XML file line #0: Binary XML file line #0: Error inflating class xxx.AutoFitTextureView 解決: <com.example.testy2.AutoFitTextureView android: ......

    uj5u.com 2020-09-10 07:00:41 more
  • 根據Uri,Cursor沒有獲取到對應的屬性

    Android: 背景:呼叫攝像頭,拍攝視頻,指定保存的地址,但是回傳的Cursor檔案,只有名稱和大小的屬性,沒有其他諸如時長,連ID屬性都沒有 使用 cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATIO ......

    uj5u.com 2020-09-10 07:00:44 more
  • Android連載29-持久化技術

    一、持久化技術 我們平時所使用的APP產生的資料,在記憶體中都是瞬時的,會隨著斷電、關機等丟失資料,因此android系統采用了持久化技術,用于存盤這些“瞬時”資料 持久化技術包括:檔案存盤、SharedPreference存盤以及資料庫存盤,還有更復雜的SD卡記憶體儲。 二、檔案存盤 最基本存盤方式, ......

    uj5u.com 2020-09-10 07:00:47 more
  • Android Camera2Video整合到自己專案里

    背景: Android專案里呼叫攝像頭拍攝視頻,原本使用的 MediaStore.ACTION_VIDEO_CAPTURE, 后來因專案需要,改成了camera2 1.Camera2Video 官方demo有點問題,下載后,不能直接整合到專案 問題1.多次拍攝視頻崩潰 問題2.雙擊record按鈕, ......

    uj5u.com 2020-09-10 07:00:50 more
  • Android 開發技術周報 Issue#293

    新聞 谷歌為Android TV開發者提供多種新功能 Android 11將自動填表功能整合到鍵盤輸入建議中 谷歌宣布Android Auto即將支持更多的導航和數字停車應用 谷歌Pixel 5只有XL版本 搭載驍龍765G且將比Pixel 4更便宜 [圖]Wear OS將迎來重磅更新:應用啟動時間 ......

    uj5u.com 2020-09-10 07:01:38 more
  • 海豚星空掃碼投屏 Android 接收端 SDK 集成 六步驟

    掃碼投屏,開放網路,獨占設備,不需要額外下載軟體,微信掃碼,發現設備。支持標準DLNA協議,支持倍速播放。視頻,音頻,圖片投屏。好點意思。還支持自定義基于 DLNA 擴展的操作動作。好像要收費,沒體驗。 這里簡單記錄一下集成程序。 一 跟目錄的build.gradle添加私有mevan倉庫 mave ......

    uj5u.com 2020-09-10 07:01:43 more
最新发布
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:40:31 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:40:11 more
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:39:36 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:39:13 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:16:23 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:16:15 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:15:46 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:14:53 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:14:08 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:08:34 more