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
更多相關文章
  • 問題概述 在Transactional方法中使用this方式調用另一個Transactional方法時,攔截器無法攔截到被調用方法,嚴重時會使事務失效。 類似以下代碼: @Transactional public void insertBlogList(List<Blog> blogList) { ...
  • 大家是否見過這種for迴圈,在for迴圈前加了個標記的: outerLoop: for (; ; ) { for (; ; ) { break outerLoop; } } 我之前有一次在公司業務代碼中見過有這種寫法的,沒在意,今天在看JDK線程池的代碼時,又看到ThreadPoolExecutor ...
  • 生成的代碼將和介面對應的參數、返回值一一對應,本文底層使用的工具為NSwag.exe,其他可替代的方案還有AutoSet.exe。 本文中生成的代碼將在編譯過程中自動編譯,類似grpc生成代碼的模式,如果使用AutoSet則需要手動引入代碼。 另外也可以使用NSwag對應的vs插件(https:// ...
  • 本文屬於 OData 系列 引言 在 OData 中,EDM(Entity Data Model) 代表“實體數據模型”,它是一種用於表示 Web API 中的結構化數據的格式。EDM 定義了可以由 OData 服務公開的數據類型、實體和關係。 EDM 也提供了一些規則來描述數據模型中的實體之間的關 ...
  • C# 實現winform軟體最小化到系統托盤,開機自啟動 問題描述 用戶的電腦是win7系統,應用系統在用戶電腦上運行時部分功能需要訪問註冊表,但是使用這些功能時會提示用戶沒有許可權訪問註冊表。原因分析 win7及後續高版本系統對用戶的許可權控制比較嚴,就算用戶的許可權較高,但用戶啟動程式時預設還是以普通 ...
  • I2C匯流排 | I2C匯流排介紹 I2C匯流排介紹 I2C(Inter - Intergrated Circuit)匯流排(也稱IIC或I2C)是由PHILIPS公司開發的兩線式串列匯流排,用於連接微控制器及其外圍設備,是微電子通行控制領域廣泛採用的一種匯流排標準。它是同步通信的一種特殊形式,具有介面少、控制 ...
  • 環境: 工具:Microsoft Edge Dev 系統版本:Windows 10 需求描述: 描述:需要正常游覽Flash頁面的所有內容,不能有缺少的動畫 提示: 本文章是最簡單的且直接的,若你的電腦不適合這個游覽器,可以看我另外一篇文章。https://www.cnblogs.com/boluo ...
  • 考前說明:所有項目運行過程中出現紅色字體的報錯信息是正常的,運行完成後看 “failed=0” 就代表執行成功,如果在執行任務期間暫停並且報錯那麼代表項目內部書寫格式或者命令輸入錯誤,請認真檢查 此文檔為考前模擬不代表真實考試環境及內容。 環境說明: | system | IP Address | ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...