首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么预定义的单元文件名在GNAT中只有8个字符?

为什么预定义的单元文件名在GNAT中只有8个字符?
EN

Stack Overflow用户
提问于 2019-03-04 10:59:01
回答 1查看 117关注 0票数 1

我正在为Arduino Due构建一个基于this work by Brent Seidel的运行时。主板使用爱特梅尔公司的SAM3X8E处理器,正如你可能注意到的,这是一个由七个字母组成的名称。布伦特在a-sam3x8.ads文件中做了这样的记录

代码语言:javascript
复制
--  This package should be called "System.Sam3x8e", but after lots of testing,
--  it seems that for some reason it just wouldn't find the package.  Calling
--  the package "System.Sam3x8" does work.

事实上,在我自己的测试之后,我不能用“正确的”名称来构建运行时。仔细检查后,我注意到GNAT和其他BSP中的所有预定义文件看起来都只有6个字母长,加上GNAT documentation on file naming rules中描述的前缀。还有一些关于gnatkr和“压缩”文件名为一定数量的字符的信息,甚至有一个预定义的单位被压缩为8个字符的例子。然而,我找不到任何关于为什么预定义单位被缩短的解释。

我想,为了解决这个问题,我可以将包命名为System.SAM3X8E,然后压缩它或添加pragma Source_File_Name,但我实际上更愿意只使用描述性的文件名。事实上,如果我可以重命名所有预定义的文件以使用它们的全名,我会很高兴的。我知道它们会很长,但我宁愿有一个长的描述性的名字,而不是一个由六个字母组成的乱七八糟的字母数字。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-12 04:17:18

正如here所指出的,此限制是对8.3 filenames的适应,由不超过8个字符和一个可选扩展名组成。正如@Zerte所指出的那样,1995年左右,随着Ada95的出现,here问世了,当时DOS仍然很流行,Windows运行在DOS之上。此外,所有的文件系统都有名称length limits,而描述性的包名和层次结构深度没有。实现如何适应后者有所不同,但GNAT使用文件系统。

请注意,gnatkr只是将包名转换为符合问题中引用的的文件名。

代码语言:javascript
复制
$ gnatkr System.Sam3x8e.adb
s-sam3x8.adb

在名为s-sam3x8.ads的文件中应该可以有一个名为System.Sam3x8e的包

代码语言:javascript
复制
package System.Sam3x8e is…

这将允许其他编译单元在上下文子句中引用全名:

代码语言:javascript
复制
with System.Sam3x8e;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54976045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档