macOS下安裝gcc、gdb (親測可行)

来源:https://www.cnblogs.com/booturbo/archive/2023/05/09/17384509.html
-Advertisement-
Play Games

macOS系統中預設的C/C++編譯器是clang/clang++,命令行使用gcc/g++或者clang/clang++來執行命令時,都是調用clang/clang++編譯器,想使用gcc/g++編譯器的話,我們可以自己安裝。 查看一下gcc和clang 1. 安裝Homebrew,官網鏈接,複製 ...


 

 

macOS系統中預設的C/C++編譯器是clang/clang++,命令行使用gcc/g++或者clang/clang++來執行命令時,都是調用clang/clang++編譯器,想使用gcc/g++編譯器的話,我們可以自己安裝。

查看一下gcc和clang

1. 安裝Homebrew官網鏈接,複製粘貼到Terminal運行腳本,如下

 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

2. 安裝gcc編譯器集

查看安裝的版本,由於macOS中的gcc名字被占用,所以需要使用gcc-13來調用新安裝的gcc編譯器集,如前面可以看到安裝的大版本號是13,如果想使用gcc來調用gcc編譯器而不是clang,可以修改預設編譯器(這裡不修改)。

3. 安裝gdb

macOS的debugger是lldb,得自己安裝gdb並且安裝後要仔細的設置一下(比較麻煩),否則會報錯:

WARNING: Debugger executable '/usr/local/bin/gdb' is not signed. As a result, debugger may not work properly. 

ERROR: Unable to start debugging. Unexpected GDB output from command "-exec-run". Unable to find Mach task port for process-id 5602: (os/kern) failure (0x5).

(please check gdb is codesigned - see taskgated(8))

安裝完成後,可以查看一下安裝位置,

接下來是關鍵部分,重要!重要!

3.1 在System keychain中創建證書

開始使用新構建的gdb之前,要授權,就像前面圖中劃線部分,gdb requires special privileges to access Mach ports. 這裡參考GDB Wiki

GDB Wiki中有的步驟使用了自動腳本,這裡僅使用手動方式,系統是macOS Ventura Version 13.2.1,

(1) 雙擊打開 Keychain Access Application,位置在 /Applications/Utilities/Keychain Access.app  

(2)打開菜單項 Keychain Access --> Certificate Assistant --> Create a Certificate... ,點擊Create a Certificate... 

(3)給證書選個名字,此處是 gdb_codesign,可以用其他名字; 設置 Identity TypeSelf Signed Root ; 設置 Certificate Type Code Signing ; 勾選 Let me override defaults,然後Continue,

接下來預設即可(中間截圖省略),點擊幾次Continue,直到為證書指定位置(Specify a Location For The Certificate),設置 KeychainSystem ,然後 Create,輸入密碼

創建成功會顯示如下,然後退出 Keychain Access Application 來刷新一下證書存儲。(如果不能在System keychain中存儲證書,可以選擇在 login 中創建證書,接著導出,然後將證書導入到System keychain中)

(4)控制

在命令行Terminal中輸入下麵的命令,gdb_codesign 要改成自己的證書名稱,確保 keychain 是 System keychain

 security find-certificate -c gdb_codesign |grep System.keychain

再確保證書沒有過期,命令行輸入,同樣 gdb_codesign 要改成自己的證書名稱,

 security find-certificate -p -c gdb_codesign | openssl x509 -checkend 0

3.2 信任證書 (Trust the certificate for code signing)

還是選擇手動操作,再次打開 Keychain Access Application

(1)點擊 System --> My Certificates --> 雙擊 gdb_codesign,找到 Trust 一項並展開,設置 Code Signing Always Trust 再一次退出Keychain Access Application 來刷新一下證書存儲。

(2)控制 

在命令行Terminal輸入以下命令,會顯示 gdb_codesign 這個證書的 trust settings信息,包括Code Signing

 security dump-trust-settings -d

3.3 簽名(Sign and entitle the gdb binary)

(1)在home工作路徑下創建一個文件,命令行中輸入 touch gdb-entitlement.xml ,文件包含以下內容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.security.cs.allow-jit</key>
    <true/>
    <key>com.apple.security.cs.allow-unsigned-executable-memory</key>
    <true/>
    <key>com.apple.security.cs.allow-dyld-environment-variables</key>
    <true/>
    <key>com.apple.security.cs.disable-library-validation</key>
    <true/>
    <key>com.apple.security.cs.disable-executable-page-protection</key>
    <true/>
    <key>com.apple.security.cs.debugger</key>
    <true/>
    <key>com.apple.security.get-task-allow</key>
    <true/>
</dict>
</plist>

(2)命令行中輸入以下命令,gdb_codesign 改成自己的證書名字,必要時在命令前加上 sudo,如果需要頻繁地構建 gdb,可以加上 --enable-codesign=gdb_codesign (gdb_codesign改成自己的)

codesign --entitlements gdb-entitlement.xml -fs gdb_codesign $(which gdb)

(3)控制

在命令行中輸入以下命令

 codesign -vv $(which gdb)
 codesign -d --entitlements :- $(which gdb)

3.4 刷新一下系統的證書和code-signing 數據 (Refresh the system's certificates and code-signing data)

最可靠的方式就是重啟系統。

 

註:親測有效,系統版本是 macOS Ventura Version 13.2.1

 

 

Enjoy it!


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

-Advertisement-
Play Games
更多相關文章
  • 一:背景 1. 講故事 最近在分析一個 linux 上的 dump,最後的誘因是大量的lock鎖誘發的高頻上下文切換,雖然問題告一段落,但我還想知道一點信息,所謂的高頻到底有多高頻?鎖競爭到底是一個怎樣的鎖競爭? 如果瞭解這些信息對我們後續分析此類問題非常有幫助。 要想獲取此類信息,看 dump 肯 ...
  • 本文屬於OData系列文章 Intro 前面寫了很多有關OData使用的文章,很多讀者會有疑問,直接將實體對象暴露給最終用戶會不會有風險?$expand在預設配置的情況下,數據會不會有泄露風險? 答案是肯定的,由於OData的特性,提供給我們便捷同時也會帶來一些風險。很多地方推薦使用DTO模式來隔離 ...
  • 一、安裝 Mailx Ubuntu sudo apt-get install bsd-mailx CentOS7 yum -y install mailx 二、獲取郵箱授權碼 (解決報錯問題 535 Error: authentication failed, system busy) 以騰訊企業郵箱 ...
  • 在Linux平臺找出某個目錄下創建時間最早的文件,測試驗證腳本結果是否準確的過程中發現一個很有意思的現象,stat命令在一些平臺下Birth欄位有值,而在一些平臺則為空值,如下所示: RHEL 8.7下, XFS文件系統 [mysql@mysqlu02 ~]$ more /etc/redhat-re ...
  • Ubuntu中恢復rm命令誤刪文件(轉) 電腦系統:Ubuntu 16.04 1 背景 在做項目的時候,本來想使用rm命令刪除以14開頭的文件,結果寫成如下形式: rm 14 * 註意,本來14和*之間不應該有空格的,但是誤寫了一個空格,結果導致所有文件都被刪除了!為了找回被誤刪的文件,根據網上的 ...
  • Scala 只是學習無基本理論 安裝Scala 裝前必須有jdk windows安裝 解壓縮 D:dev/scala 配置環境變數 SCALA_HONE path cmd檢查 Scala -version 直接輸入Scala 控制台運行 idea安裝與運行Scala idea-->插件-->scal ...
  • 目錄 一、引導分區 二、服務控制 三、運行級別 四、systemd初始化 五、模擬錯誤 一、引導分區 原理:引導分區是指在開機啟動到進入系統這之間的過程 引導分區的過程:1.開機自檢 自檢順序:BIOS,cup,記憶體,顯卡,鍵盤 根據預設的順序控制權交給硬碟(第一個硬碟或者光碟機) 2.mbr引導 機 ...
  • 收藏!最全Linux思維導圖 1. 認識 Linux 2. Linux 命令 3. Linux學習路徑 4. Linux 桌面介紹 5. FHS:文件系統目錄標準 6. Linux 需要特別註意的目錄 7. Linux 內核學習路線 8. Linux Security Coaching 9. Lin ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...