swift 使用SMAMB2包,重新打包的心酸歷程

来源:https://www.cnblogs.com/17years/archive/2022/06/24/16408518.html
-Advertisement-
Play Games

首先網上很多教程是關於使用swift SMAMB2包的,大部分都是 pod "SMAMB2" 這種方式還是非常簡單的,如果僅僅是這樣還不至於專門寫一篇文章來紀念他。問題就出在我的項目需要用到SMB協議去讀取文件,但是並不是直接讀取! 通俗一點來講就是我的用法和 SMAMB2包提供的用法不同! 那就意 ...


首先網上很多教程是關於使用swift SMAMB2包的,大部分都是

pod "SMAMB2"

這種方式還是非常簡單的,如果僅僅是這樣還不至於專門寫一篇文章來紀念他。問題就出在我的項目需要用到SMB協議去讀取文件,但是並不是直接讀取!

通俗一點來講就是我的用法和 SMAMB2包提供的用法不同!

那就意味我要重新打包了,而當我看了一下源碼發現,AMSMB2竟然又用了libsmb2包,將libsmb2打包成 .a 文件。

剛開始看到兩個項目的 README 我還以為會很簡單。但是萬萬沒想到,光是打包我就經歷了兩天才成功!

第一個坎: 

我是用的Mac mini安裝brew,安裝好多次都失敗了,在度娘上尋找了一圈。最後在終端輸入一下代碼:

/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

參考:https://blog.csdn.net/qq_40922656/article/details/123532784

經過不懈的努力,終於解決了這個問題。

第二個坎:

 

 

 也不知道是什麼鬼,眼看要到開始生成 .a文件的時候返回找不到什麼玩意。

經過無休止的百度之後,終於發現瞭解決方案。

autoreconf -vif

但是讓我萬萬沒想到的是,這個指令竟然需要到 AMSMB2/buildtool/libsmb2 中去執行(這裡的libsmb2文件夾是源碼中沒有的,需要之後自己添加,如果不添加的話就會自動從github中拉去最新的libsmb2項目)

因為我的項目需要的用法就是要自己重寫libsmb2,因此我已經提前準備好了修改之後的libsmb2(公司大佬修改的,用C寫的,在下C僅局限於輸出Hello world,見笑了)

經過終端編譯後,出現一下這一幕就表示你應該是成功了

 

這個時候就可以進入到 AMSMB2/buildtool 文件夾下執行build命令了!

./build.sh

 

 

 

 出現以上,就表示你的 .a文件已經構建完成了(目前還是不太清楚這些WARNING是什麼意思,如果有明白的大佬歡迎留言指導!)

到此就可以看到你的  libsmb2-ios.a 文件已經安安靜靜的躺在 AMSMB2/libsmb2 文件夾下了!

第三個坎:

我將已經打包完成的 .a文件併入 AMSMB2項目想要重新打包並生成新的靜態 .framework給iOS使用。但是開始編譯那一刻我心態崩了啊,祖國山河一片紅叉!!!

 

 經過我向公司大佬的咨詢在  libsmb2.h  文件中加入以下代碼:

#ifndef UINT64_MAX 
 #include <stdint.h> 
 #endif 

very nice,終於乾乾凈凈的編譯通過了,哈哈哈。

到這裡我心酸的自定義libsmb算是畫上一部分句號,至於其他的還有一部分內容沒有解決,等解決完之後再決定是不是需要寫下來!

 

參考網站:

AMSMB2項目:https://github.com/amosavian/AMSMB2

libsmb2項目:https://github.com/sahlberg/libsmb2

autoreconf -vif:https://stackoverflow.com/questions/15448582/installed-libtool-but-libtoolize-not-found


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這玩意搞了我今天,直接裂開!系統更新根本解決不了 好在查了相關資料才知道,原來微軟在 Win10 的更新中,將搜索功能和語音助手 Cortana 進行了拆分,搜索成了一個獨立的功能,還好有外媒發現問題原因是 Bing 和 Cortana 集成造成,而且修複很簡單。 方法1 使用電腦管家修複; 方法2 ...
  • 四、Nginx 4.1、概述 4.1.1、介紹 Nginx是一款輕量級的Web伺服器/反向代理伺服器/電子右鍵(IMAP/POP3)代理伺服器。其特點是占有記憶體少,併發能力強,事實上Nginx的併發能力在同類型的網頁伺服器中表現較好,中國大陸使用Nginx的網站有:百度、就京東、新浪、網易、騰訊、淘 ...
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 CentOS 1.備份原來的源 在控制台輸入mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup備份原本的源 2、下載新的 CentOS-Bas ...
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 一、環境要求 系統版本:CentOS7.x版本 硬體配置:記憶體2GB以上 cpu2核以上 硬碟大於30G 集群網路配置:集群中所有伺服器內網必須互通,並且需要訪問外網來拉取鏡像 禁用swap分區 二、k8s基礎環境操作: 1、關閉防火牆: [ro ...
  • 程式包編譯安裝的步驟: 源代碼-->預處理-->編譯-->彙編-->鏈接-->執行 多文件:文件中的代碼之間,很可能存在跨文件依賴關係 編譯源碼的項目工具 使用相關的項目管理工具可以大大減少編譯過程的複雜度 根據源碼類型來對這些工具進行分類: C、C++的源碼編譯:使用 make 項目管理器 con ...
  • 1、簡述 binlog 二進位日誌文件,這個文件記錄了MySQL所有的DML操作。通過binlog日誌我們可以做數據恢復,增量備份,主主複製和主從複製等等。 2、Docker中無法使用vim問題解決 https://blog.csdn.net/Tomwildboar/article/details/ ...
  • Android multiple back stacks導航 談談android中多棧導航的幾種實現. 什麼是multiple stacks 當用戶在app里切換頁面時, 會需要向後回退到上一個頁面, 頁面歷史被保存在一個棧里. 在Android里我們經常說"back stack". 有時候在app ...
  • 隨著人們對生活的儀式感的追求,移動設備、可穿戴設備、智能家居設備、車載信息娛樂系統也變得越來越流行。在這些應用上,滑鼠、鍵盤這樣的交互方式不再便捷,而語音作為人類之間最自然的交流方式,語音識別技術儼然已成為各大應用的“標配”。語音識別場景應用十分廣泛,如語音輸入法、語音搜索、實時字幕、游戲娛樂、社交 ...
一周排行
    -Advertisement-
    Play Games
  • 1、什麼是MQTT? MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸協議),是一種基於發佈/訂閱(publish/subscribe)模式的"輕量級"通訊協議,該協議構建於TCP/IP協議上,由IBM在1999年發佈。MQTT最大優點在於,可以以極 ...
  • 溫馨提示,請使用ctrl+F進行快速查找 ws2_32.lib error LNK2001: 無法解析的外部符號 __imp_htons error LNK2001: 無法解析的外部符號 __imp_ntohl error LNK2001: 無法解析的外部符號 __imp_ntohs error L ...
  • public static void GetRegistData() { string name = "huishuangzhu"; //搜索到註冊表根目錄 RegistryKey hkml = Registry.ClassesRoot; //搜索到註冊表根目錄下的XXX文件夾。 RegistryK ...
  • 作者:小牛呼嚕嚕 | https://xiaoniuhululu.com 電腦內功、JAVA源碼、職業成長、項目實戰、面試相關資料等更多精彩文章在公眾號「小牛呼嚕嚕」 前言 讀過筆者之前的一篇文章Java記憶體模型(JMM)詳解, 我們知道了由於電腦為了充分利用CPU的高性能,以及各個硬體 存取速 ...
  • 使用Apache PDFBox實現拆分、合併PDF 問題背景 如何拆分PDF? 如何合併PDF? 如何拆分併合並PDF實現去除PDF的某些頁? Apache PDFBox介紹 Apache PDFBox 1.8.10官方文檔 Apache PDFBox 庫是一個開源的 Java 工具,用於處理 PD ...
  • 問題:是不是虛函數的調用就一定是動態綁定?不是的 1:在類的構造函數當中,調用虛函數,也是靜態綁定(構造函數中對虛函數的調用不發生動態綁定) 2:如果不是通過指針或者引用變數來調用虛函數,那就是靜態綁定 代碼1 class Base { public: Base(int data=10):ma(da ...
  • 本篇文章我們將進一步探討下Guava Cache 實現層面的一些邏輯與設計策略,讓我們可以對Guava Cache整體有個更加明朗的認識,促進實際使用中對其的理解。 ...
  • JZ12 矩陣中的路徑 描述 請設計一個函數,用來判斷在一個n乘m的矩陣中是否存在一條包含某長度為len的字元串所有字元的路徑。路徑可以從矩陣中的任意一個格子開始,每一步可以在矩陣中向左,向右,向上,向下移動一個格子。如果一條路徑經過了矩陣中的某一個格子,則該路徑不能再進入該格子。 思路 我們看到他 ...
  • 抽象類和普通類有什麼區別? 抽象類一般不用作抽象實體類型 一般把上面類設計為抽象類? 基類 定義抽象類的唯一目的, 就是去建立派生類. 我們在抽象類基礎上要定義出功能各異的派生類, 再用這些派生類去建立對象. 凡是包含純虛函數的類都是抽象類. 純虛函數不用實現, 故不能被調用, 抽象類無法建立對象. ...
  • 打包下載成.zip文件 項目背景 公司使用vue + SpringBoot實現批量下載功能 今天在調試批量下載這個功能。打包成.zip文件時,在返回給前端瀏覽器出現報錯信息: 後端報錯: ERROR c.c.p.c.e.BusinessExceptionHandler - java.io.IOExc ...