标签: gnu

是否有任何好的工具来检查Makefile?

大型复杂的make文件可能令人生畏,无法阅读和检查.哪些工具可用于可视化或以其他方式检查gnu make文件?

visualization gnu makefile

16
推荐指数
2
解决办法
4151
查看次数

什么是GNU tar ././@LongLink"技巧"?

我读的是的"L"(76)焦油条目类型所使用的GNU tar和兼容GNU焦油公用事业表明,在归档中的下一个项目有一个"长"的名字.在这种情况下,条目类型为"L"的标题块通常编码名称././@LongLink.

我的问题是:描述的下一个块的格式在哪里?

tar存档的格式非常简单:它只是一系列512字节的块.在正常情况下,tar存档中的每个文件都表示为一系列块.第一个块是标题块,包含文件名,条目类型,修改时间和其他元数据.然后使用所需的512字节块来跟随原始文件数据.然后是下一个条目.

如果文件名长于适合标题块中分配的空间,gnu tar显然使用了所谓的"././@LongLink技巧".我找不到它的准确描述.

当条目类型为"L"时,我如何知道"长"文件名有多长?长名称是否限制为512字节,换句话说,什么适合一个块?

最重要的是:这在哪里记录?

interop gnu tar

15
推荐指数
2
解决办法
1万
查看次数

如何理解GNU源代码?

如果这听起来有点愚蠢,我真的很抱歉.我刚读完K&R并参与了一些练习.今年夏天,对于我的项目,我正在考虑重新实现一个linux实用程序,以进一步扩展我对C的理解,所以我下载了GNU tar和sed的源代码,因为它们看起来都很有趣.但是,我无法理解它的起始位置,主要实现的位置,所有奇怪的宏来自哪里,等等.

我有很多时间,所以这不是一个真正的问题.我是否应该首先熟悉GNU工具链(即make,binutils,..)才能理解程序?或者也许我应该从更小的东西开始(如果有这样的事情)?

如果重要的话,我对Java,C++和python有一点经验.

谢谢!

c gnu project

15
推荐指数
4
解决办法
2909
查看次数

GNU是什么意思?

是的,我知道GNU意味着'GNU不是Unix',但那个GNU是什么?我的意思是,如果我在自己的定义中替换GNU,我会得到'GNU不是Unix不是Unix',我可以无限次地再做一次.作为一个问题听起来很愚蠢,但我真的无法理解......

unix gnu

15
推荐指数
3
解决办法
2万
查看次数

什么时候GAS ELF指令.type,.thumb,.size和.section需要?

我正在使用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常量和其他)之间切换,并在需要时定义新的部分.我猜你会根据你是否定义代码,数据,未初始化的数据等来切换它们.但是为什么要为函数创建一个子部分,如上例所示?


对此有任何帮助表示赞赏.如果您能找到更详细地解释这一点的教程或文档的链接 - 最好是新手可以理解的 - 我将非常感激.

到目前为止,使用手册已经有了一些帮助 - 也许你可以通过更多的知识获得比我更多的东西.

assembly arm gnu gnu-assembler elf

15
推荐指数
3
解决办法
8638
查看次数

grep是如何工作的?

我试图了解它是如何grep工作的.

当我说grep "hello" *.*,确实grep得到2个参数 - (1)要搜索的字符串,即"你好"和(2)路径*.*?或者shell转换*.*grep可以理解的东西?

我在哪里可以获得源代码grep?我遇到了这个GNUgrep链接.其中一个README文件说它与...不同unix grep.怎么会这样?

我想看一下FreeBSD版本的源代码grep以及它的Linux版本(如果它们不同的话).

c unix shell grep gnu

15
推荐指数
3
解决办法
2万
查看次数

如何使用/安装GNU binutils(objdump)

我需要在我的应用程序中使用objdump和readelf命令在Windows上运行.我知道我可以安装cygwin以便使用它们.我之所以不想使用cygwin是因为我想让它的文章部署.另外我不知道如何安装cygwin.因此,我认为我需要的是GNU Utilities For Win32,因为链接声明这些库是无服务器的."可执行文件仅依赖于Microsoft C-runtime(msvcrt.dll),而不依赖于Cygwin工具提供的仿真层"

无论如何,一旦我去那个链接,我不知道如何安装它.具体来说,我想使用>这个工具<

如果有人可以指出我将如何在我的应用程序中使用objdump和readelf(binutils in cygwin),我将不胜感激.

windows cygwin gnu objdump binutils

15
推荐指数
1
解决办法
4万
查看次数

如何在管道中使用GNU Time

我想在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与管道的正确语法是什么?

bash time pipeline gnu

15
推荐指数
1
解决办法
5208
查看次数

了解GNU链接器脚本的位置计数器

我正在开展一个大学项目,我正在从头开始为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)

embedded linker arm gnu linker-scripts

15
推荐指数
2
解决办法
8782
查看次数

如何在gnu/linux上安装boost

有这么多的教程,但没有说明我如何正确安装这个库.我想将它安装在默认的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)

c++ linux boost gnu

15
推荐指数
1
解决办法
3万
查看次数