自己構建的交叉編譯器找不到PATH_MAX

接上篇centos6.10 編譯gcc11.5 x64到aarch64交叉工具鏈 -CSDN博客

PATH_MAX找不到,不僅在編譯gcc的過程中遇到,而且臨時改gcc源碼添加#define PATH_MAX 4096 宏定義后勉強通過gcc全量編譯。這個新的gcc編譯使用了PATH_MAX宏的代碼還是會找不到。這個問題看來不弄清楚不行。

PATH_MAX在哪定義的

進入到交叉gcc的include目錄查找PATH_MAX,發現是在linux/limits.h這個頭文件定義的,這是內核頭文件,同時我在用我的交叉gcc編譯protobuf時,查看報錯PATH_MAX找不到的文件,protobuf提示包含#include <limits.h>是為了提供PATH_MAX。那么說明glibc最終會引用linux/limits.h。順藤摸瓜驗證了這一猜想。

分析

于是我寫了個測試代碼,用我的gcc編譯,報錯。然后嘗試各種宏定義,也不行。

#include <stdio.h>
//#define _GNU_SOURCE 1
//##define _GCC_LIMITS_H_
//#define _POSIX_C_SOURCE 200809L
//#define  _LIMITS_H___#include <limits.h>int main()
{char buf[PATH_MAX]={0};printf("hello");
}

嘗試預處理階段宏展開aarch64-linux-gnu-gcc -E hello.c | less,發現他用是下面這個limites.h

另外構建的一個本地gcc11.5.0是正常的,宏展開是這樣的,看樣子是這個incude-fixed搞得鬼

研究了半天,查找fixincludes?的文檔這么說

當?fixincludes?由 GCC 的 Makefile 運行時,這個?README?文件會被復制到僅包含 GCC 頭文件的目錄中。

此目錄中的許多文件是通過?fixincludes?過程從標準系統頭文件自動編輯而來的。它們是特定于系統的,無法在其他類型的系統上使用。它們也不是 GCC 的一部分。我們之所以需要這樣做,是因為 GCC 需要符合 ANSI C 標準的頭文件,而許多供應商提供的頭文件與 ANSI 不兼容。

由于這是一個自動化過程,有時一些嚴格來說不需要“修復”的頭文件也會被“修復”。只要這個過程沒有破壞任何東西,這只是一個不幸的附帶不便。如果“不太麻煩”,我們希望能夠糾正這種情況。

總之這個東西就是為了解決gcc與使用glibc頭不兼容,自動自行修正include頭文件的,那么是不是我編譯的gcc配置錯誤,導致修正不對。

嘗試對比能用的和不能用的incude-fixed/limits.h,差別不大,前后包了一層宏定義,替換一下能用的這個頭,他媽的果然行了。但是還沒找到是什么導致這個差異

嘗試在源碼目錄查找_GCC_LIMITS_H_ 找到了limitx.h 和limity.h 這兩個文件的內容就是前后包的代碼段

繼續找limitx.h文件名,能用和不能用的limits.h 區別在一個條件判斷,關鍵在于LIMITS_H_TEST這個變量

這個LIMITS_H_TEST的值取決于SYSTEM_HEAD_DIR

?到構建目錄找最后的Makefile,這是變量展開后的內容,$(gcc_tooldir)/sys-include。到安裝目錄下去找,確實沒有這個目錄,gcc_tooldir是上層傳入的變量,

libsubdir = $(libdir)/gcc/$(target_noncanonical)/$(version)
gcc_tooldir='$(libsubdir)/$(libsubdir_to_prefix)$(target_noncanonical)'?

libsubdir_to_prefix這個東西的意思是把libsubdir轉換成prefix需要的../..這種。那么其實libsubdir是啥不重要,gcc_tooldir 就是$(prefix)/$(target_noncanonical)

在我這里應該是安裝目錄的aarch64-linux-gnu/sys-include目錄 沒有這個目錄。

解決

配置編譯gcc時產生這個目錄,用--with-headers,會把你的glibc頭copy過去產生,或者你自己把glibc頭安裝到這個目錄。原來官方文檔說了,fixinclude會在這些文件上運行,產生兼容gcc的glibc頭,答案早就在這里啊,只是不經歷這么一遭根本理解不了

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/898480.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/898480.shtml
英文地址,請注明出處:http://en.pswp.cn/news/898480.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vscode查看文件歷史git commit記錄

方案一&#xff1a;GitLens 在vscode擴展商店下載GitLens 選中要查看的文件&#xff0c;vscode界面右上角點擊GitLens的圖標&#xff0c;選擇Toggle File Blame 界面顯示當前打開文件的所有修改歷史記錄 鼠標放到某條記錄上&#xff0c;可以看到記錄詳情&#xff0c;選中O…

ngx_http_conf_ctx_t

定義在 src/http/ngx_http_config.h typedef struct {void **main_conf;void **srv_conf;void **loc_conf; } ngx_http_conf_ctx_t; ngx_http_conf_ctx_t 是 Nginx 中用于管理 HTTP 配置上下文的核心結構體&#xff0c;其設計體現了 Nginx 多級配置&…

IREE AI編譯器編譯測試流程指南

iree onnx demo 計劃協議系列博客,記錄學習iree編譯器的過程. 今天第一篇博客,記錄安裝和測試iree 文章目錄 iree onnx demo下載安裝ireepython環境安裝編譯測試1. [前端] onnx模型轉MLIR文件2. [后端] MLIR文件轉可執行文件3. [執行] 執行測試編譯后的文件 關于后端設備的介…

【產品小白】如何運營一個新的產品

運營一個新產品既充滿機遇&#xff0c;也伴隨著挑戰。新產品運營的核心在于快速獲取用戶、驗證市場假設、持續迭代與優化&#xff0c;并通過有效的推廣和用戶反饋機制不斷完善產品。 1. 市場調研與定位 用戶調研&#xff1a;在產品初期&#xff0c;通過訪談、問卷、競品分析等…

破解驗證碼新利器:基于百度OCR與captcha-killer-modified插件的免費調用教程

破解驗證碼新利器&#xff1a;基于百度OCR與captcha-killer-modified插件的免費調用教程 引言 免責聲明&#xff1a; 本文提供的信息僅供參考&#xff0c;不承擔因操作產生的任何損失。讀者需自行判斷內容適用性&#xff0c;并遵守法律法規。作者不鼓勵非法行為&#xff0c;保…

JSON 解析中需要清理的危險字符

在代碼中 replace(chr(0), "") 的作用是刪除 JSON 響應中可能存在的空字符&#xff08;Null character&#xff09;。以下是詳細解釋&#xff1a; 1. chr(0) 是什么&#xff1f; chr(0) 表示 ASCII 碼為 0 的字符&#xff0c;即空字符&#xff08;Null Character&am…

指令系統2(Load/Store 指令)

一. Load/Store 指令 1. 前變址 前變址指令是在讀取或存儲數據時&#xff0c;先根據基址寄存器&#xff08;Rn&#xff09;與偏移量&#xff08;offset&#xff09;計算出有效地址&#xff0c;再進行數據操作。相關指令及示例如下&#xff1a; LDR R0, [R1, #4]&#xff1a;從…

ubuntu部署運行xinference全精度對話deepseek本地部署圖文教程

前置環境搭建勞請移步往期 source activate 自己環境名啟動python3.12環境安裝xinference&#xff0c; 按教程敲命令&#xff0c;wheel包與wsl的通用&#xff0c;pip install 包名。 vllm引擎&#xff0c;transform引擎也會順帶自動裝上了。 后續操作請參照往期教程。本地部署模…

技術分享 | MySQL內存使用率高問題排查

本文為墨天輪數據庫管理服務團隊第51期技術分享&#xff0c;內容原創&#xff0c;如需轉載請聯系小墨&#xff08;VX&#xff1a;modb666&#xff09;并注明來源。 一、問題現象 問題實例mysql進程實際內存使用率過高 二、問題排查 2.1 參數檢查 mysql版本 &#xff1a;8.0.…

[AI速讀]混合語言IP集成:挑戰與高效解決方案

在現代SoC(系統級芯片)設計中,IP(知識產權模塊)復用是提升開發效率的關鍵。然而,當設計涉及多種硬件描述語言(如SystemVerilog、VHDL、SystemC)時,如何高效集成不同語言的IP模塊成為一大難題。本文將從實際設計場景出發,探討混合語言IP集成的核心挑戰,并介紹一套方法…

【vulhub/wordpress靶場】------獲取webshell

1.進入靶場環境&#xff1a; 輸入&#xff1a;cd / vulhub / wordpress / pwnscriptum 修改版本號&#xff1a; vim docker-compose.yml version: 3 保存退出 開啟靶場環境&#xff1a; docker - compose up - d 開啟成功&#xff0c;docker ps查看端口 靶場環境80…

微信小程序:用戶拒絕小程序獲取當前位置后的處理辦法

【1】問題描述&#xff1a; 小程序在調用 wx.getLocation() 獲取用地理位置時&#xff0c;如果用戶選擇拒絕授權&#xff0c;代碼會直接拋出錯誤。如果再次調用 wx.getLocation() 時&#xff0c;就不會在彈窗詢問用戶是否允許授權。導致用戶想要重新允許獲取地理位置時&#x…

NLP 與常見的nlp應用

自然語言處理&#xff08;NLP&#xff09;是一個廣泛的領域&#xff0c;它不僅包括自然語言理解&#xff08;NLU&#xff09;&#xff0c;還涉及一系列其他任務和子領域。以下是NLP領域中的主要組成部分及其相關任務&#xff1a; 1. 自然語言理解&#xff08;NLU&#xff09; …

全網首創/純Qt/C++實現國標GB28181服務/實時視頻/云臺控制/預置位/錄像回放和下載/事件訂閱/語音對講

一、前言說明 用純Qt來實現這個GB28181的想法很久了&#xff0c;具體可以追溯到2014年&#xff0c;一晃十年都過去了&#xff0c;總算是整體的框架和邏輯都打通了&#xff0c;總歸還是雜七雜八的事情多&#xff0c;無法靜下心來研究具體的協議&#xff0c;最開始初步了解協議后…

Django+celery+flower

Djangoceleryflower Django的定時任務及可視化監控Django Django的定時任務及可視化監控 Django的定時任務&#xff0c;以及可視化監控。 Django Django&#xff1b; 首先在python中新建虛擬環境并激活 pip install virtualenv python -m venv venv source venv/bin/activa…

Python 編程題 第十一節:選擇排序、插入排序、刪除字符、目標移動、尾部的0

選擇排序 假定第一個為最小的為已排序序列&#xff0c;與后面的比較&#xff0c;找到未排序序列中最小的后&#xff0c;交換位置&#xff0c;獲得最小元素&#xff0c;依次往后 lst[1,14,25,31,21,13,6,8,14,9,7] def selection_sort(lst):for i in range(len(lst)):min_inde…

組態王Kingview配置為OPCUA服務器的一些問題處理

一、問題描述 1、組態王【運行配置】界面沒有【服務配置】的選項&#xff0c;無法將組態王Kingview配置為OPCUA服務器&#xff1b; 2、點擊組態王【運行配置界面】的【服務配置】選項彈窗警告提示【試圖執行的操作不受支持】&#xff0c;如下圖所示&#xff1a; 二、問題分析 …

模塊二 單元4 安裝AD+DC

模塊二 單元4 安裝ADDC 兩個任務&#xff1a; 1.安裝AD活動目錄 2.升級當前服務器為DC域控制器 安裝前的準備工作&#xff1a; 確定你要操作的服務器系統&#xff08;Windows server 2022&#xff09;&#xff1b; 之前的服務器系統默認是工作組的模式workgroup模式&#xff08…

git clone項目報錯fatal: fetch-pack: invalid index-pack output問題

前情回顧&#xff1a;git項目放在公司服務器上面&#xff0c;克隆等操作需要連接VPN才能操作。由于項目比較大&#xff0c;網速比較慢&#xff0c;克隆項目經常出現fetch-pack: invalid index-pack output。在網上查找各種解決方法。也就這一種有點效果。僅供參考&#xff0c;不…

前端Tailwind CSS面試題及參考答案

解釋 Tailwind CSS 中 w-1/2 和 max-w-md 的區別及適用場景 在 Tailwind CSS 里&#xff0c;w-1/2 和 max-w-md 屬于不同類型的寬度控制類&#xff0c;它們的功能和適用場景存在明顯差異。 w-1/2 是用來設定元素寬度的類。它把元素寬度設定為其父元素寬度的一半。例如&#xff…