标签: gnu

GNU可以使用空格来处理文件名吗?

我有一个包含多个文件的目录,其中一些文件的名称中有空格:

Test workspace/
Another directory/
file1.ext
file2.ext
demo 2012-03-23.odp
Run Code Online (Sandbox Code Playgroud)

$(wildcard)在这个目录上使用GNU的命令,然后使用遍历结果$(foreach),打印出所有内容.这是代码:

FOO := $(wildcard *)
$(info FOO = $(FOO))
$(foreach PLACE,$(FOO),$(info PLACE = $(PLACE)))
Run Code Online (Sandbox Code Playgroud)

以下是我希望看到的内容:

Test workspace
Another directory
file1.ext
file2.ext
demo 2012-03-23.odp
Run Code Online (Sandbox Code Playgroud)

这是我真正得到的:

Test
workspace
Another
directory
file1.ext
file2.ext
demo
2012-03-23.odp
Run Code Online (Sandbox Code Playgroud)

后者对我来说显然毫无用处.该文档$(wildcard)它返回一个"名字的空格分隔的名单",但完全平整出国家不承认这引起了巨大的问题.也不对文件进行$(foreach).

有可能解决这个问题吗?如果是这样,怎么样?重命名每个文件和目录以删除空格不是一个选项.

shell gnu makefile

69
推荐指数
4
解决办法
3万
查看次数

用gcc编译C++程序

问题:如何使用gcc编译器编译C++程序?

info.c:

#include<iostream>
using std::cout;
using std::endl;
int main()
{
   #ifdef __cplusplus
   cout << "C++ compiler in use and version is " << __cplusplus << endl;
   #endif
   cout <<"Version is " << __STDC_VERSION__ << endl;
   cout << "Hi" << __FILE__ << __LINE__ << endl;
}
Run Code Online (Sandbox Code Playgroud)

当我尝试编译 info.c

$ gcc info.C

Undefined                       first referenced
 symbol                             in file
cout                                /var/tmp/ccPxLN2a.o
endl(ostream &)                     /var/tmp/ccPxLN2a.o
ostream::operator<<(ostream &(*)(ostream &))/var/tmp/ccPxLN2a.o
ostream::operator<<(int)            /var/tmp/ccPxLN2a.o
ostream::operator<<(long)           /var/tmp/ccPxLN2a.o
ostream::operator<<(char const *)   /var/tmp/ccPxLN2a.o
ld: fatal: Symbol referencing errors. No output written …
Run Code Online (Sandbox Code Playgroud)

c++ gcc gnu g++

68
推荐指数
5
解决办法
17万
查看次数

将GCC称为"cc"与"gcc"

我知道在大多数GNU/Linux系统中,GCC可以通过命令行中的名称"cc"调用(而不是"gcc").当GCC以一种方式与另一种方式被调用时,它的行为是否有任何区别?

例如,我知道通过名称"g ++"而不是"gcc"调用GCC会导致GCC的行为不同(它将.c文件视为C++源代码和C++标准库中的链接)."gcc"和"cc"之间的行为有什么类似的差异吗?

编辑:到目前为止收到的答案中没有一个给出明确的 "是"或"否",以确定GCC在相对于另一种方式调用时是否会表现不同.然而,潜入源头检查其行为的想法导致我走上了这条道路.基于我在那里找到的东西,我现在相信答案是:

不.无论是通过"gcc"还是"cc"调用,GCC的行为都相同.

c linux compiler-construction gcc gnu

67
推荐指数
5
解决办法
3万
查看次数

ELF文件格式中节和段的区别是什么

来自wiki 可执行文件和可链接格式:

这些段包含运行时执行文件所必需的信息,而段包含用于链接和重定位的重要数据.整个文件中的任何字节最多只能由一个部分拥有,并且可能存在不属于任何部分的孤立字节.

但是段和段之间有什么区别?在可执行的ELF文件中,段是否包含一个或多个部分?

linux debian gnu elf abi

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

我需要我的sed -i命令进行就地编辑才能使用GNU sed和BSD/OSX sed

我有一个makefile(在Linux上为gmake开发),我试图移植到OSX,但似乎sed不想合作.我所做的是使用GCC自动生成依赖文件,然后使用sed稍微调整一下.makefile的相关部分:

$(OBJ_DIR)/%.d: $(SRC_DIR)/%.cpp
  $(CPPC) -MM -MD $< -o $@
  sed -i 's|\(.*\)\.o:|$(OBJ_DIR)/\1.o $(OBJ_DIR)/\1.d $(TEST_OBJ_DIR)/\1_utest.o:|' $@
Run Code Online (Sandbox Code Playgroud)

虽然这在GNU/Linux下没有遇到麻烦,但在尝试构建OSX时会出现如下错误:

sed: 1: "test/obj/equipmentConta ...": undefined label 'est/obj/equipmentContainer_utest.d'
sed: 1: "test/obj/dice_utest.d": undefined label 'est/obj/dice_utest.d'
sed: 1: "test/obj/color-string_u ...": undefined label 'est/obj/color-string_utest.d'
Run Code Online (Sandbox Code Playgroud)

看起来sed正在砍掉一个角色,但我看不到解决方案.

macos gnu sed inplace-editing

59
推荐指数
6
解决办法
4万
查看次数

从make文件中禁用make内置规则和变量

我想禁用内置规则和变量,因为从make文件中传递-r-R选项到GNU make.允许我隐式和透明地执行此操作的其他解决方案也是受欢迎的.

我发现了几个使用的参考MAKEFLAGS,并有类似的问题.

gnu makefile build gnu-make

52
推荐指数
6
解决办法
2万
查看次数

GNU并行完全没有工作

我一直试图使用GNU并行一段时间,但我从来没有能够让它完全运行!

例如,运行(在非空目录中!):

ls | parallel echo            # Outputs single new line
ls | parallel echo echo echo  # Outputs three new lines.
ls | parallel echo {}         # /bin/bash: {}: command not found
ls | parallel echo '{}'       # /bin/bash: {}: command not found
ls | parallel 'echo {}'       # Outputs: {}
ls | parallel -IMM 'echo MM'  # Outputs: MM
Run Code Online (Sandbox Code Playgroud)

它似乎只是将每个参数作为命令执行,这没有任何意义.

我试过bash,zsh,tcsh,csh和sh,但无济于事.

parallel-processing gnu xargs gnu-parallel

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

GNU make产生"命令在第一个目标之前开始"错误

在我的makefile中,我想检查是否存在库并提供信息性错误消息.我创建了一个条件,当找不到文件时应该退出make进程:

 9: ifeq ($(${JSONLIBPATH}),)
10:    JSONLIBPATH = ${ALTJSONLIBDIR}/${LIBJSON}
11: endif
12: ifeq ($(${JSONLIBPATH}),)
13:    $(error JSON library is not found. Please install libjson before building)
14: endif 
Run Code Online (Sandbox Code Playgroud)

我的makefile卡在第13行:

Makefile:13: *** commands commence before first target.  Stop.
Run Code Online (Sandbox Code Playgroud)

在第13行之后,我的makefile有了它的目标.

我尝试将此条件块放入目标(例如,被调用的目标isJSONLibraryInstalled),但这不能正确执行.

在处理目标之前,我如何检查文件是否存在并处理错误情况?如果这是一个愚蠢的问题,请道歉.

gnu makefile

49
推荐指数
2
解决办法
8万
查看次数

libc(glibc)在我们的linux应用程序中的作用是什么?

当我们使用gdb调试程序时,我们通常会看到在libc(glibc?)中定义了奇怪名称的函数.我的问题是:

  1. libc/glibc是一些标准C/C++函数的标准实现,如"strcpy","strlen","malloc"?
  2. 或者,它不仅是如上所述的第一次使用,还是Unix/Linux系统调用的包装,如"open","close","fctl"?如果是这样,为什么我们不能直接发出系统调用,没有libc?
  3. libc只包含一个lib(.a或.so)文件,还是许多lib文件(在这种情况下,libc是这组lib的通用名称)?这些lib文件驻留在哪里?
  4. libc和glibc有什么区别?

c linux gnu

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

为什么使用asprintf()而不是sprintf()?

我很难理解你为什么需要asprintf.它在手册中说

的功能asprintf()vasprintf()是的类似物sprintf(3)vsprintf(3),除了它们分配一个字符串足够大以容纳包括终止空字节的输出,并且经由第一个参数的指针返回到它.应该传递此指针 free(3)以在不再需要时释放已分配的存储.

所以这是我试图理解的例子:

asprintf(&buffer, "/bin/echo %s is cool", getenv("USER"));
Run Code Online (Sandbox Code Playgroud)

如果缓冲区分配足够大的字符串而不是说char*=(字符串),那有什么区别

c printf gnu asprintf

48
推荐指数
2
解决办法
5万
查看次数