大型复杂的make文件可能令人生畏,无法阅读和检查.哪些工具可用于可视化或以其他方式检查gnu make文件?
我读的是的"L"(76)焦油条目类型所使用的GNU tar和兼容GNU焦油公用事业表明,在归档中的下一个项目有一个"长"的名字.在这种情况下,条目类型为"L"的标题块通常编码名称././@LongLink.
我的问题是:描述的下一个块的格式在哪里?
tar存档的格式非常简单:它只是一系列512字节的块.在正常情况下,tar存档中的每个文件都表示为一系列块.第一个块是标题块,包含文件名,条目类型,修改时间和其他元数据.然后使用所需的512字节块来跟随原始文件数据.然后是下一个条目.
如果文件名长于适合标题块中分配的空间,gnu tar显然使用了所谓的"././@LongLink技巧".我找不到它的准确描述.
当条目类型为"L"时,我如何知道"长"文件名有多长?长名称是否限制为512字节,换句话说,什么适合一个块?
最重要的是:这在哪里记录?
如果这听起来有点愚蠢,我真的很抱歉.我刚读完K&R并参与了一些练习.今年夏天,对于我的项目,我正在考虑重新实现一个linux实用程序,以进一步扩展我对C的理解,所以我下载了GNU tar和sed的源代码,因为它们看起来都很有趣.但是,我无法理解它的起始位置,主要实现的位置,所有奇怪的宏来自哪里,等等.
我有很多时间,所以这不是一个真正的问题.我是否应该首先熟悉GNU工具链(即make,binutils,..)才能理解程序?或者也许我应该从更小的东西开始(如果有这样的事情)?
如果重要的话,我对Java,C++和python有一点经验.
谢谢!
是的,我知道GNU意味着'GNU不是Unix',但那个GNU是什么?我的意思是,如果我在自己的定义中替换GNU,我会得到'GNU不是Unix不是Unix',我可以无限次地再做一次.作为一个问题听起来很愚蠢,但我真的无法理解......
我正在使用GNU作为基于ARM Cortex-M3的微控制器(Thumb 2指令集)的汇编程序.
在一些示例代码,我发现像指令.size,.section和.type我的理解是ELF指令.举个例子:
.section .text.Reset_Handler
.weak Reset_Handler
.type Reset_Handler, %function
Reset_Handler:
bl main
b Infinite_Loop
.size Reset_Handler, .-Reset_Handler
Run Code Online (Sandbox Code Playgroud)
.type据说该指令设置符号的类型 - 通常是%对象(意思是数据?)或%函数.我不知道它有什么不同.它并不总是包含在内,所以我不确定何时需要使用它.
与此相关的还有.thumb_func指令.从我所看到的,它似乎可能相当于:
.thumb
.type Symbol_Name, %function
Run Code Online (Sandbox Code Playgroud)
或者它是完全不同的东西?
.size据说设置与符号相关的大小.如果需要,我不知道.这是默认计算的,但可以使用此指令覆盖吗?如果是这样 - 你想什么时候覆盖?
.section比较容易找到的文档,我觉得我有什么清晰的概念呢,但我还是有点不确定的使用.我理解它的方式,它在不同的ELF部分(text代码,data可写数据,bss未初始化数据,rodata常量和其他)之间切换,并在需要时定义新的部分.我猜你会根据你是否定义代码,数据,未初始化的数据等来切换它们.但是为什么要为函数创建一个子部分,如上例所示?
到目前为止,使用手册已经有了一些帮助 - 也许你可以通过更多的知识获得比我更多的东西.
我试图了解它是如何grep工作的.
当我说grep "hello" *.*,确实grep得到2个参数 - (1)要搜索的字符串,即"你好"和(2)路径*.*?或者shell转换*.*成grep可以理解的东西?
我在哪里可以获得源代码grep?我遇到了这个GNUgrep链接.其中一个README文件说它与...不同unix grep.怎么会这样?
我想看一下FreeBSD版本的源代码grep以及它的Linux版本(如果它们不同的话).
我需要在我的应用程序中使用objdump和readelf命令在Windows上运行.我知道我可以安装cygwin以便使用它们.我之所以不想使用cygwin是因为我想让它的文章部署.另外我不知道如何安装cygwin.因此,我认为我需要的是GNU Utilities For Win32,因为链接声明这些库是无服务器的."可执行文件仅依赖于Microsoft C-runtime(msvcrt.dll),而不依赖于Cygwin工具提供的仿真层"
无论如何,一旦我去那个链接,我不知道如何安装它.具体来说,我想使用>这个工具<
如果有人可以指出我将如何在我的应用程序中使用objdump和readelf(binutils in cygwin),我将不胜感激.
我想在postgresql中测量一些SQL查询的运行时间.使用BASH内置时间,我可以执行以下操作:
$ time (echo "SELECT * FROM sometable" | psql)
Run Code Online (Sandbox Code Playgroud)
我喜欢GNU时间,它提供更多格式.但是我不知道怎么用管道做.为简单起见,我ls | wc在以下示例中使用:
$ /usr/bin/time -f "%es" (ls | wc)
-bash: syntax error near unexpected token `('
$ /usr/bin/time -f "%es" "ls | wc"
/usr/bin/time: cannot run ls | wc: No such file or directory
Run Code Online (Sandbox Code Playgroud)
如果我不以任何方式对管道进行分组,它不会抱怨:
$ /usr/bin/time -f "%es" ls | wc
0.00s
Run Code Online (Sandbox Code Playgroud)
但显然,这仅测量管道的第一部分,如下一个示例所示
$ /usr/bin/time -f "%es" ls | sleep 20
0.00s
Run Code Online (Sandbox Code Playgroud)
那么问题是GNU Time与管道的正确语法是什么?
我正在开展一个大学项目,我正在从头开始为Atmel SAM7S256微控制器编写软件.这比我之前使用的其他MCU更深入,因为这次需要了解链接器脚本和汇编语言.
我一直在仔细审查SAM7S芯片的示例项目,以便完全了解如何从头开始SAM7/ARM项目.一个明显的例子是米罗萨梅克的"建筑裸机ARM系统的GNU"教程发现这里(其中在该问题的代码是从).我也花了很多时间从sourceware.org阅读链接器和汇编程序文档.
我很高兴我在大多数情况下理解以下链接器脚本.只有一件涉及到位置计数器的东西对我来说没有意义.以下是上述教程提供的链接描述文件:
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_vectors)
MEMORY { /* memory map of AT91SAM7S64 */
ROM (rx) : ORIGIN = 0x00100000, LENGTH = 64k
RAM (rwx) : ORIGIN = 0x00200000, LENGTH = 16k
}
/* The sizes of the stacks used by the application. NOTE: you need to adjust */
C_STACK_SIZE = 512;
IRQ_STACK_SIZE = 0;
FIQ_STACK_SIZE = 0;
SVC_STACK_SIZE = 0;
ABT_STACK_SIZE = 0;
UND_STACK_SIZE = 0;
/* The size of the heap used by …Run Code Online (Sandbox Code Playgroud) 有这么多的教程,但没有说明我如何正确安装这个库.我想将它安装在默认的gnu/linux库目录中.
我试过了:
$ sudo ./bootstrap.sh
$ ./b2 install
Run Code Online (Sandbox Code Playgroud)
现在它安装在哪里?它安装了吗?
运行后./b2 install我得到以下输出:
z@z-comptuer:~/Desktop/.mess/boost_1_55_0/tools/build/v2$ sudo ./b2 install
warning: No toolsets are configured.
warning: Configuring default toolset "gcc".
warning: If the default is wrong, your build may not work correctly.
warning: Use the "toolset=xxxxx" option to override our guess.
warning: For more configuration options, please consult
warning: http://boost.org/boost-build2/doc/html/bbv2/advanced/configuration.html
...found 580 targets...
...updating 306 targets...
common.mkdir /usr/local/share/boost-build
common.mkdir /usr/local/share/boost-build/tools
common.copy /usr/local/share/boost-build/tools/msvc.jam
common.copy /usr/local/share/boost-build/tools/cast.py
common.copy /usr/local/share/boost-build/tools/qt4.jam
common.copy /usr/local/share/boost-build/tools/make.jam
common.copy /usr/local/share/boost-build/tools/common.jam
common.copy …Run Code Online (Sandbox Code Playgroud)