无法在Ubuntu 20.04上构建GDB master Jul 9 2020

无法在Ubuntu 20.04上构建GDB master Jul 9 2020,gdb,linker-errors,build-error,Gdb,Linker Errors,Build Error,尝试从2020年7月9日起通过以下方式构建gdb主控设备e79eb02f2f09baecffb144bac6804f975065466f ./configure && make -j4 gdb as最终链接过程中的错误 CXXLD gdb init.c:215: error: undefined reference to '_initialize_ser_hard()' init.c:236: error: undefined reference to '_initial

尝试从2020年7月9日起通过以下方式构建gdb主控设备e79eb02f2f09baecffb144bac6804f975065466f

./configure && make -j4
gdb as最终链接过程中的错误

  CXXLD  gdb
init.c:215: error: undefined reference to '_initialize_ser_hard()'
init.c:236: error: undefined reference to '_initialize_tui_()'
init.c:244: error: undefined reference to '_initialize_array_vie()'
init.c:249: error: undefined reference to '_initialize_copy_bit()'
init.c:253: error: undefined reference to '_initialize_function_vie()'
init.c:263: error: undefined reference to '_initialize_rsp_lo()'
init.c:267: error: undefined reference to '_initialize_string_vie()'
init.c:287: error: undefined reference to '_initialize_break_catch_thro()'
init.c:297: error: undefined reference to '_initialize_corelo()'
init.c:307: error: undefined reference to '_initialize_d()'
init.c:309: error: undefined reference to '_initialize_d()'
init.c:311: error: undefined reference to '_initialize_d()'
init.c:312: error: undefined reference to '_initialize_d()'
init.c:323: error: undefined reference to '_initialize_frame_un()'
init.c:334: error: undefined reference to '_initialize_inflo()'
collect2: error: ld returned 1 exit status
这是一个已知的问题吗

有什么问题吗

更新

我已经将错误跟踪到了gdb/init.c,它是由包含似乎从结束符号截断的构建生成的。例如,关于符号_initialize _seru _硬用作

在gdb/init.c中。但是在源代码树的其余部分中找不到_initialize_seru_hard。但是,符号_initialize_ser_hardwire是在文件gdb/ser unix.c中定义的。我想剩下的缺失符号也是如此。所以我的结论是gdb/init.c的生成是错误的

有什么问题吗

GDB中的任何地方都没有“初始化”、“中断”、“捕获”和“抛出”,但有“初始化”、“中断”、“捕获”和“抛出”

看起来您的某个地方有一个损坏的.o文件,不知怎的,它让很多函数缺少了最后一个字符

我不知道这是怎么发生的,但是删除整个构建目录并重新构建将是我的第一步

更新:

LD=LD.bfd./configure 现在我得到了构建错误

您得到的生成错误不可能来自使用其他链接器

要么你的系统在某种程度上有问题,我会检查所有磁盘并重新启动,要么你忽略了一些相关信息和/或进行了其他更改

有什么问题吗

GDB中的任何地方都没有“初始化”、“中断”、“捕获”和“抛出”,但有“初始化”、“中断”、“捕获”和“抛出”

看起来您的某个地方有一个损坏的.o文件,不知怎的,它让很多函数缺少了最后一个字符

我不知道这是怎么发生的,但是删除整个构建目录并重新构建将是我的第一步

更新:

LD=LD.bfd./configure 现在我得到了构建错误

您得到的生成错误不可能来自使用其他链接器


要么您的系统在某种程度上有问题,我会检查所有磁盘并重新启动,要么您忽略了一些相关信息和/或进行了其他更改。

我已按如下方式进行了检查,发现on没有此类固有问题,因此它必须是特定于系统的,正如另一个答案所建议的那样

首先,我与今天最新的GDB master 2020-08-04进行了核对:

$ docker run -ti ubuntu:20.04
...
# apt-get update && apt-get install bison flex binutils git make g++ texinfo
...
# git clone git://sourceware.org/git/binutils-gdb.git
...
# cd binutils-gdb
# mkdir build && cd build
# CC=gcc ../configure
...
# make -j4
... ... ... ...
# gdb/gdb --version
GNU gdb (GDB) 10.0.50.20200804-git
...
然后找到了2020年7月9日的最新提交id,它也起了作用:

# cd ..
# git checkout f37e5866aa72e76f2199155fb838ffc25c78a26e
...
# mkdir build-20200709 && cd build-20200709
# CC=gcc ../configure
...
# make -j4
... ... ... ...
# gdb/gdb --version
GNU gdb (GDB) 10.0.50.20200709-git
...
# cd ..
# git checkout e79eb02f2f09baecffb144bac6804f975065466f
...
# mkdir build-e79eb02f2f09baecffb144bac6804f975065466f
# cd build-e79eb02f2f09baecffb144bac6804f975065466f
# CC=gcc ../configure
...
# make -j4
... ... ... ...
# gdb/gdb --version
GNU gdb (GDB) 10.0.50.20200725-git
...
。。。然后注意到您提到了实际的提交id,它也起了作用:

# cd ..
# git checkout f37e5866aa72e76f2199155fb838ffc25c78a26e
...
# mkdir build-20200709 && cd build-20200709
# CC=gcc ../configure
...
# make -j4
... ... ... ...
# gdb/gdb --version
GNU gdb (GDB) 10.0.50.20200709-git
...
# cd ..
# git checkout e79eb02f2f09baecffb144bac6804f975065466f
...
# mkdir build-e79eb02f2f09baecffb144bac6804f975065466f
# cd build-e79eb02f2f09baecffb144bac6804f975065466f
# CC=gcc ../configure
...
# make -j4
... ... ... ...
# gdb/gdb --version
GNU gdb (GDB) 10.0.50.20200725-git
...

我按如下方式检查了它,发现on没有这种固有的问题,所以它必须是系统特定的,正如另一个答案所建议的

首先,我与今天最新的GDB master 2020-08-04进行了核对:

$ docker run -ti ubuntu:20.04
...
# apt-get update && apt-get install bison flex binutils git make g++ texinfo
...
# git clone git://sourceware.org/git/binutils-gdb.git
...
# cd binutils-gdb
# mkdir build && cd build
# CC=gcc ../configure
...
# make -j4
... ... ... ...
# gdb/gdb --version
GNU gdb (GDB) 10.0.50.20200804-git
...
然后找到了2020年7月9日的最新提交id,它也起了作用:

# cd ..
# git checkout f37e5866aa72e76f2199155fb838ffc25c78a26e
...
# mkdir build-20200709 && cd build-20200709
# CC=gcc ../configure
...
# make -j4
... ... ... ...
# gdb/gdb --version
GNU gdb (GDB) 10.0.50.20200709-git
...
# cd ..
# git checkout e79eb02f2f09baecffb144bac6804f975065466f
...
# mkdir build-e79eb02f2f09baecffb144bac6804f975065466f
# cd build-e79eb02f2f09baecffb144bac6804f975065466f
# CC=gcc ../configure
...
# make -j4
... ... ... ...
# gdb/gdb --version
GNU gdb (GDB) 10.0.50.20200725-git
...
。。。然后注意到您提到了实际的提交id,它也起了作用:

# cd ..
# git checkout f37e5866aa72e76f2199155fb838ffc25c78a26e
...
# mkdir build-20200709 && cd build-20200709
# CC=gcc ../configure
...
# make -j4
... ... ... ...
# gdb/gdb --version
GNU gdb (GDB) 10.0.50.20200709-git
...
# cd ..
# git checkout e79eb02f2f09baecffb144bac6804f975065466f
...
# mkdir build-e79eb02f2f09baecffb144bac6804f975065466f
# cd build-e79eb02f2f09baecffb144bac6804f975065466f
# CC=gcc ../configure
...
# make -j4
... ... ... ...
# gdb/gdb --version
GNU gdb (GDB) 10.0.50.20200725-git
...
嗯,我也是,FWIW

在fedora 32 x86_64上

我注意到,在genrated gdb/Makefile中,我得到了一个警告,比如第593行,在我的例子中,保存在emacs中。这是Makefile的一部分,最后一行是空的或只有选项卡的第593行:

内部\CPPFLAGS=$CPPFLAGS-I/usr/include/guile/2.0-pthread-I/usr/include/\python3.8-I/usr/include/python3.8\

请注意继续

嗯,我也是,FWIW

在fedora 32 x86_64上

我注意到,在genrated gdb/Makefile中,我得到了一个警告,比如第593行,在我的例子中,保存在emacs中。这是Makefile的一部分,最后一行是空的或只有选项卡的第593行:

内部\CPPFLAGS=$CPPFLAGS-I/usr/include/guile/2.0-pthread-I/usr/include/\python3.8-I/usr/include/python3.8\


请注意,续篇

遇到了同样的问题,因为_initialize_ser_hard试图在Fedora上构建gdb-10.1,这是一个区域设置问题

罪魁祸首是gdb/Makefile中的sed语句

@-for f in $(INIT_FILES); do \
    sed -n -e 's/^_initialize_\([a-z_0-9A-Z]*\).*/\1/p' \
        $(srcdir)/$$f 2>/dev/null; \
这假设a-z扩展到a和z之间的所有ASCII字符,但至少sv_SE.UTF-8,也许丹麦语和其他一些语言在上述模式中不包括w,并且_initialize_ser_hardwire变为ser_hardwire,而不是预期的ser_hardwire

在sed命令上添加LC_COLLATE=C保护将得到预期的结果


我不知道这是预期的还是正确的,但我知道w在瑞典语中的地位有一段扭曲的历史,直到最近才成为官方人物,并且通常与v排序相同,不区分v和w。

遇到了相同的问题,因为_initialize_seru_努力在Fedora上构建gdb-10.1,这是一个区域设置问题

罪魁祸首是gdb/Makefile中的sed语句

@-for f in $(INIT_FILES); do \
    sed -n -e 's/^_initialize_\([a-z_0-9A-Z]*\).*/\1/p' \
        $(srcdir)/$$f 2>/dev/null; \
这假设a-z扩展到a和z之间的所有ASCII字符,但至少sv_SE.UTF-8,也许丹麦语和其他一些语言在上述模式中不包括w,并且_initialize_ser_hardwire变为ser_hardwire,而不是预期的ser_hardwire

在服务器上添加LC_COLLATE=C保护 sed命令给出了预期的结果


我不知道这是否是预期的或正确的,但我确实知道,在瑞典语中w的地位有一段扭曲的历史,直到最近才成为官方字符,并且通常与v排序相同,不区分v和w。

我更新了答案。您的更新忽略了一件事,即新生成错误是来自GDB目录中的make,还是来自其他地方。我尝试以新的默认用户身份生成。同样的错误。真奇怪。我想知道原因是否在/usr/local/下。有没有办法看到确切的命令行调用而不仅仅是CXXLD gdb?顺便说一句,/usr/local/empty的内容是否在新的Ubuntu安装中?请参阅本线程顶部的我的更新。我将错误追溯到gdb/init.c中的截断符号。这是一个奇怪的问题…我更新了答案。您的更新忽略了一件事,即新生成错误是来自GDB目录中的make,还是来自其他地方。我尝试以新的默认用户身份生成。同样的错误。真奇怪。我想知道原因是否在/usr/local/下。有没有办法看到确切的命令行调用而不仅仅是CXXLD gdb?顺便说一句,/usr/local/empty的内容是否在新的Ubuntu安装中?请参阅本线程顶部的我的更新。我将错误追溯到gdb/init.c中的截断符号。这是一个奇怪的…好的。谢谢我可以在docker容器中构建,然后将构建安装到我的主机上吗?我问自己同样的问题,然后直接在主机Ubuntu18.04上构建和安装。通过sudo make install安装,从而在/usr/local周围部署了至少多个新的子文件夹和许多文件。如果没有sudo,它将无法工作,因为它全部归root所有。然后我不得不从git repo的根目录下sudo cp-rf gdb/python/lib/gdb/*/usr/local/share/gdb/python/gdb/来修复gdb-version上的python异常,最后,由于Schuetze&Buclaw最近在GDB master中修复了D-demangle.c,我可以在vscode+code-D中更好地调试我的D程序。可能值得尝试在主机上停靠cp-r container_name:/path/to/构建目录和sudo make install。它将导致更新的gdb位于Ubuntu附带的/usr/bin/gdb前面的/usr/local/bin/gdb下。将需要启动一个新的shell或刷新旧的shell,现在确定如何获取新的gdb。谢谢我可以在docker容器中构建,然后将构建安装到我的主机上吗?我问自己同样的问题,然后直接在主机Ubuntu18.04上构建和安装。通过sudo make install安装,从而在/usr/local周围部署了至少多个新的子文件夹和许多文件。如果没有sudo,它将无法工作,因为它全部归root所有。然后我不得不从git repo的根目录下sudo cp-rf gdb/python/lib/gdb/*/usr/local/share/gdb/python/gdb/来修复gdb-version上的python异常,最后,由于Schuetze&Buclaw最近在GDB master中修复了D-demangle.c,我可以在vscode+code-D中更好地调试我的D程序。可能值得尝试在主机上停靠cp-r container_name:/path/to/构建目录和sudo make install。它将导致更新的gdb位于Ubuntu附带的/usr/bin/gdb前面的/usr/local/bin/gdb下。将需要启动一个新的shell或刷新旧的shell,现在确定如何获取新的gdb;看来我根本没有产生幻觉;