自己构建的交叉编译器找不到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.mzph.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…