标签: gnu

如何调用使用define创建的GNU make宏?

在我的Makefile中调用GREP的两种方式有什么不同吗?任何理由我应该使用其中一个?两者似乎都产生了相同的结果.

define GREP
$(word 3,$(shell echo "#define  FOO     0xfff00100"))
endef

all:
        @echo $(GREP)
        @echo $(call GREP)
Run Code Online (Sandbox Code Playgroud)

macros gnu makefile

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

是否有glibc哈希函数?

我想在C中做一个自定义哈希表实现.在GNU库中是否已经有一个MD5/SHA1哈希函数,或者我是否必须使用外部库?

这是我正在寻找的东西:

int hashValue;

hashValue = MD5_HASH(valToHash);
Run Code Online (Sandbox Code Playgroud)

c linux hash md5 gnu

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

在公共头文件中使用条件是一种良好的做法吗?

我的C库有一些可选功能,使用automake,用户可以通过提供配置标志来打开和关闭它们.

如果关闭某个功能,则不会编译该功能.

但是,我的问题是,在这种情况下,我是否应该从公共头文件中删除函数原型?

这似乎不是一个好主意,有未编译函数的函数原型,但它对我来说不是一个好主意,有不同的公共报头装取决于库配置.(类似于config.h在公共头文件目录中安装的不良做法.)

对于可选功能,公共标题的最佳方法是什么?如果用户尝试使用禁用的功能,错误应该在编译时还是链接时?这种情况必须有标准做法.(如果有多个想法,我更愿意遵守GNU编码标准,但我不知道关于这个问题的GNU标准.)

c automake gnu shared-libraries

10
推荐指数
1
解决办法
158
查看次数

/usr/include/gnu/stubs.h:7:27:错误:gnu/stubs-32.h:没有这样的文件或目录

我正在尝试安装roccc 2.0.我已经安装了所需的包.现在安装它时,它给了我这个错误:

/usr/include/gnu/stubs.h:7:27: error: gnu/stubs-32.h: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我搜索gnu/stubs-32.h并了解了,对于Linux 64位进程glibc-devel以及对于Linux 32位,其中libc6-dev-i386.

我使用的是Linux 32位:i386 GNU/Linux,但lib无法解决此错误.

有人可以帮帮我吗?

linux gnu i386

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

LD_LIBRARY_PATH似乎不起作用

我正在尝试编译测试文件:

gcc -o test  test.c -lg2c
Run Code Online (Sandbox Code Playgroud)

但我得到错误:

/usr/bin/ld: cannot find -lg2c
Run Code Online (Sandbox Code Playgroud)

如果我使用:

gcc -o test  test.c -L/usr/lib/gcc/x86_64-redhat-linux/3.4.6 -lg2c
Run Code Online (Sandbox Code Playgroud)

然后它工作正常.

所以我添加了这样的路径:

LD_LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/3.4.6:$LD_LIBRARY_PATH
Run Code Online (Sandbox Code Playgroud)

当我在那里使用$LD_LIBRARY_PATH它时,但是:

gcc -o test  test.c -lg2c
Run Code Online (Sandbox Code Playgroud)

仍然不起作用,它给出了同样的错误,我无法弄清楚为什么.

我正在使用CentOS(2.6.32-279.9.1.el6.x86_64),任何帮助将不胜感激.


编辑:编译器版本:

rpm -qa | grep gcc

gcc-4.4.6-4.el6.x86_64
compat-gcc-34-g77-3.4.6-19.el6.x86_64
libgcc-4.4.6-4.el6.x86_64
compat-gcc-34-3.4.6-19.el6.x86_64
gcc-gfortran-4.4.6-4.el6.x86_64
libgcc-4.4.6-4.el6.i686
gcc-c++-4.4.6-4.el6.x86_64
Run Code Online (Sandbox Code Playgroud)

编辑:我尝试使用LIBRARY_PATH,现在我得到一个不同的错误:

gcc: spec failure: unrecognized spec option 'M'
Run Code Online (Sandbox Code Playgroud)

我不知道这意味着什么.

linux gcc gnu centos

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

如何使用Unix连接获取外连接中的所有字段?

假设我有两个文件,en.csv并且sp.csv,每个都包含正好两个逗号分隔的记录:

en.csv:

1,dog,red,car
3,cat,white,boat
Run Code Online (Sandbox Code Playgroud)

sp.csv:

2,conejo,gris,tren
3,gato,blanco,bote
Run Code Online (Sandbox Code Playgroud)

如果我执行

join -t, -a 1 -a 2 -e MISSING en.csv sp.csv
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:

1,dog,red,car
2,conejo,gris,tren
3,cat,white,boat,gato,blanco,bote
Run Code Online (Sandbox Code Playgroud)

请注意,所有缺少的字段都已折叠.要获得"正确的"全外连接,我需要指定一种格式; 从而

join -t, -a 1 -a 2 -e MISSING -o 0,1.2,1.3,1.4,2.2,2.3,2.4 en.csv sp.csv
Run Code Online (Sandbox Code Playgroud)

产量

1,dog,red,car,MISSING,MISSING,MISSING
2,MISSING,MISSING,MISSING,conejo,gris,tren
3,cat,white,boat,gato,blanco,bote
Run Code Online (Sandbox Code Playgroud)

这种方式产生完全外连接的一个缺点是一个需要明确指定了决赛桌,这可能不容易编程的应用(如连接表的身份只有在运行时是已知的)做的格式.

最近版本的GNU join通过支持特殊格式消除了这个缺点auto.因此,join上面的最后一个命令的这种版本可以被更普遍的替换

join -t, -a 1 -a 2 -e MISSING -o auto en.csv sp.csv
Run Code Online (Sandbox Code Playgroud)

如何join在不支持该-o auto选项的版本中实现同样的效果?


背景和细节

我有一个Unix shell(zsh)脚本,用于处理多个CSV平面文件,并通过广泛使用GNU join的'-o auto'选项来实现.我需要修改这个脚本,以便它可以在可用 …

unix shell join gnu gnu-coreutils

10
推荐指数
1
解决办法
7939
查看次数

如何让GNU汇编程序使用斜杠/注释?

这确实是我的一个愚蠢的特质,但我不能忍受GNU AS用来插入评论的方式.我太熟悉Sun方式(在大多数UNIX汇编程序中使用的方法),它使用简单的斜杠"/"来注释掉代码直到行尾.

你知道如何实现我的小心血来潮吗?

assembly comments gnu gnu-assembler

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

为什么.SECONDARY不能用于模式(%)而.PRECIOUS呢?

我的问题是更好地理解我在制作过程中错过的内容和.SECONDARY目的与.PRECIOUS,而不是让我的脚本工作,因为它确实有效.

我正在使用make来打开文件上的emacs编辑器(java但与此问题无关)或者如果不存在则使用模板创建它.

如果它适用于现有文件,则在使用生成的文件时,最后会将其删除.

我在.SECONDARY中添加了先决条件但没有帮助,我不得不将其添加到.PRECIOUS中.

这就是为什么不在它工作的问题.SECONDARY?.

从我在SO上找到的 .SECONDARY不能用于模式(%),但即使知道它是否是设计或是否是make中的错误.(.SECONDARY用于GNU MakeMakefile模式规则的模式规则要么忽略虚假规则,要么自发删除输出文件)

这里是我的Makefile的精简内容,以重现我的问题(请创建一个com/stackoverflow/question目录来测试它).

PACKAGE=com.stackoverflow.question
PACKAGE_DIR=$(subst .,/,$(PACKAGE))
OUT=out

clean:
    find $(OUT) -name "*.class" -type f -print0|xargs -0 rm

# does not work : deleted at end due to intermediate file removal.
$(PACKAGE_DIR)/%.java:
    @echo "package com.stackoverflow.question;\npublic class $(subst .java,,$(subst $(PACKAGE_DIR)/,,$@))\n{\n /** TODO */ \n}" >$@ 

work/%: $(PACKAGE_DIR)/$(subst work/,,%).java
    emacs $<

.PHONY: clean work/%

# tried to avoid intermediate file removal : does not work
.SECONDARY: $(PACKAGE_DIR)/%.java 

# …
Run Code Online (Sandbox Code Playgroud)

gnu makefile gnu-make

10
推荐指数
2
解决办法
2317
查看次数

重定位分配器发生了什么?

我读老的glibc的文档在这里时,我看到了,我以前从来没有(r_alloc,r_alloc_free和r_re_alloc)看到三个怪功能.他们实现了一个分配器,它可以为碎片整理目的重新分配内存,我想,但我无法在其他任何地方找到更多信息.

你能告诉我更多关于这些功能的信息吗?他们还在格里布吗?如果没有,为什么他们被删除?

c gnu glibc

10
推荐指数
1
解决办法
124
查看次数

如何在打印输出的同时将命令输出存储在变量中?

说我想要echo一些东西并在变量中捕获它,同时我在屏幕上看到它.

echo "hello" | tee tmp_file
var=$(< tmp_file)
Run Code Online (Sandbox Code Playgroud)

所以现在我可以hello在终端中看到并将其保存到变量中$var.

但是,有没有办法在不使用临时文件的情况下执行此操作?tee似乎不是解决方案,因为它说(从man tee)读取标准输入并写入标准输出和文件,而这里它是标准输出的两倍.

如果这很重要,我在Bash 4.3中.

bash gnu stdout

10
推荐指数
4
解决办法
7909
查看次数