Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Build 构建glibc时出错:make/confgure文件有什么问题?_Build_Gnu Make_Glibc - Fatal编程技术网

Build 构建glibc时出错:make/confgure文件有什么问题?

Build 构建glibc时出错:make/confgure文件有什么问题?,build,gnu-make,glibc,Build,Gnu Make,Glibc,我一直在尝试在Clear Linux上构建glibc,前面的问题在这里讨论: 现在我已成功运行configure,makefile中似乎有问题: james@clr ~/Downloads/glibc $ make Makeconfig:42: *** missing separator. Stop. Makeconfig的第42行: objdir must be defined by the build-directory Makefile. 和nakefile直到错误点: ifneq

我一直在尝试在Clear Linux上构建glibc,前面的问题在这里讨论:

现在我已成功运行configure,makefile中似乎有问题:

james@clr ~/Downloads/glibc $ make
Makeconfig:42: *** missing separator.  Stop.
Makeconfig的第42行:

objdir must be defined by the build-directory Makefile.
和nakefile直到错误点:

ifneq (,)
This makefile requires GNU Make.
endif

all: # Make this the default goal

ifneq "$(origin +included-Makeconfig)" "file"

+included-Makeconfig := yes

ifdef subdir
.. := ../
endif

# $(common-objdir) is the place to put objects and
# such that are not specific to a single subdir.
ifdef objdir
objpfx := $(patsubst %//,%/,$(objdir)/$(subdir)/)
common-objpfx = $(objdir)/
common-objdir = $(objdir)
else
objdir must be defined by the build-directory Makefile.
endif

我让GNU Make 4.2.1

您看到一个错误,因为这个Make文件认为您的环境是错误的。您正在运行的makefile中的行故意是一个语法错误:对这些行进行任何编辑都不会将其更改为正确的行,因为它的全部目的是在看到无效配置时强制make失败

它试图告诉您的错误就在文本中:

objdir必须由生成目录Makefile定义

makefile检查
objdir
变量是否已定义,如果未定义,则会使用此无效语法

我已经有很长一段时间没有尝试自己构建glibc了,所以我不能确切地说这意味着什么,但我相信如果你在谷歌上搜索这个错误消息,你会发现一些信息,让你前进

很遗憾,这个makefile没有使用更可读的方式来指定错误,例如
$(error…
函数(在1999年发布的GNU make 3.78中添加)。

libc禁止从源根目录进行构建。值得阅读安装文件(您也可以在源根目录中找到它):

无法在源目录中编译GNU C库。你必须 在单独的构建目录中构建它。例如,如果你有 在“/src/GNU/glibc VERSION”中解包GNUC库源代码,创建一个 目录“/src/gnu/glibc build”将对象文件放入其中。这 允许在发生错误时删除整个生成目录,这 这是重新开始的最安全的方式,应该一直这样做

在实践中,这意味着您应该在构建目录中运行configure和make(您应该自己创建),例如:

glibc-x.xx/build> ../configure "CFLAGS=-m64 -O2" "CXXFLAGS=-m64" "LDFLAGS=-m64" --prefix=$HOME/glibc-x.xx-bin
glibc-x.xx/build> make all install

您收到的错误消息意味着glibc-x.xx/Makefile需要从某个父Makefile调用,该父Makefile必须是由configure生成的glibc-x.xx/build/Makefile。

您绝对不应该用空格替换所有选项卡。你也绝对不应该在每一行的开头放一个标签。您应该只在需要选项卡的地方使用它们,而不要在不需要选项卡的地方使用它们。由于您尚未向我们提供有关您的情况的任何信息,我们无法为您提供帮助。我建议您回到您拥有的第一个文件,如果您仍然看到“缺少分隔符”错误,请在此处发布与该错误相关的行;在上面的第一条错误消息中,它抱怨文件Makeconfig.Post中的第42行(使用正确的SO格式)make报告的有错误的行以及上下文前后的一些行。然后我们可以帮助您了解这些行可能有什么问题。谢谢,我编辑了我的问题以包括这些行,@Thoughtcraft那么您解决了这个问题吗?我也面临着这个问题,无法从这个公认的答案中找到解决方案:)你是对的,似乎objdir被定义为另一个makefile上游中的当前工作目录,而且之前有一些错误导致了这一点,似乎我必须创建另一个问题来解决这些问题。