Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.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
Compilation 编译binutils gdb can';我找不到ncurses_Compilation_Gdb_Ncurses_Binutils - Fatal编程技术网

Compilation 编译binutils gdb can';我找不到ncurses

Compilation 编译binutils gdb can';我找不到ncurses,compilation,gdb,ncurses,binutils,Compilation,Gdb,Ncurses,Binutils,我正试图根据本教程编译i686 elf目标的binutils: 我刚刚添加了--enabletui选项,以便在gdb中获得支持 我做了以下工作: #获取源代码 git克隆git://sourceware.org/git/binutils-gdb.git #商店设置 导出前缀=“`pwd`/opt/cross” 导出目标=i686 elf 导出路径=“$PREFIX/bin:$PATH” #创建生成文件夹 mkdir构建binutils cd-build-binutils #运行配置 ../

我正试图根据本教程编译i686 elf目标的binutils:

我刚刚添加了
--enabletui
选项,以便在gdb中获得支持

我做了以下工作:

#获取源代码
git克隆git://sourceware.org/git/binutils-gdb.git
#商店设置
导出前缀=“`pwd`/opt/cross”
导出目标=i686 elf
导出路径=“$PREFIX/bin:$PATH”
#创建生成文件夹
mkdir构建binutils
cd-build-binutils
#运行配置
../binutils gdb/configure-target=$target--prefix=“$prefix”--使用sysroot--禁用nls--禁用werror--启用tui
#制造
制作
这将运行一段时间,并以以下错误终止:

checking for library containing socketpair... (cached) none required
checking for ld used by GCC... (cached) ld
checking if the linker (ld) is GNU ld... (cached) yes
checking for shared library run path origin... (cached) done
checking for iconv... (cached) yes
checking for iconv declaration... (cached) 
         extern size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
checking for library containing waddstr... (cached) no
configure: error: no enhanced curses library found; disable TUI
make[1]: *** [Makefile:11329: configure-gdb] Error 1
make[1]: Leaving directory '/home/noexpandtab/dev/build-binutils'
make: *** [Makefile:853: all] Error 2
对我来说,似乎找不到ncurses图书馆

我运行了Debian 10并安装了以下附加软件包:

  • libncurses dev
  • ncurses base
  • ncurses doc
  • libncurse5开发人员

我必须安装其他软件包吗?或者我缺少配置脚本的一些选项了吗?

您正在交叉编译到不同的体系结构(
i686 elf
),而不是在问题中提到的
$TARGET
上运行。gdb必须与为该体系结构构建的库相链接

Debian提供了在当前架构上运行的,但没有为交叉编译的应用程序提供合适的包。所以你可以自己做这件事

交叉编译ncurses时,您必须记住它的一部分是在当前体系结构上构建/运行的(以生成源文件供交叉编译器编译)。这在环境中被定义为
$BUILD\u CC
(而不是
$CC
),您在阅读脚本时可能会看到这一点。文件中有一个部分(在ncurses资源中)概述了该过程


这里没有教程(无论如何,这在这里是离题的),但是其他人已经阅读了说明和交叉编译的课程,最近的一个例子证明了这一点。

我重试了整个编译过程,突然它工作了!我做了一点测试,我想我找到了自己的错误:我执行了
configure
而没有
——enable tui
,其中
make
起作用。然后我在同一个文件夹中执行了
configure
--enable tui
,而不清理它。在清理或在新文件夹中运行后,它将编译

感谢一位用户发布帖子删除了
opt/cross
的内容。(评论本身已经在中间被删除了。)这不是解决办法,但把我引向了正确的方向


TL;DR:在再次使用不同的参数运行
配置
之前,请清理生成文件夹。

如果要交叉编译,则必须编译自己的交叉编译的ncurses库。@Thomas在我看来,
--target
选项定义binutils gdb工具链将处理的二进制文件的体系结构/二进制类型。而不是执行这些二进制文件的体系结构。-因此,使用
--target=i686_elf
定义的binutil可用于创建类型为
i686_elf
的二进制文件。binutils本身不能在
i686_elf
下执行,而是在编译它们的主机体系结构下执行。因此,主机架构的ncurses库应该足够了。如果我弄错了,请纠正我。你能给我们看一下
gdb/config.log
的最后几行吗?从检查包含waddstr的库开始查看
。在查找多个curses变体时,可能会出现许多失败,但在Debian 10上,最终应该有一行
gcc-o conftest-g-O2 conftest.c-lncurses-lm-ldl>&5
,后跟
$?=0
result:-lncurses
@MarkPlotnick我检查了gdb/config.log,但在检查包含waddstr的库之后,找不到任何进一步的提示,而不是曾经作为make输出发布的提示。没有包含
contftest
ncurses
的行。