问题标签 [binutils]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
4575 浏览

gcc - llvm 有 binutils 吗?

LLVM 编译器工具链有一个与普通 gcc 兼容的 gcc。使用 llvm-gcc 的优点是可以访问任意目标,这意味着当您尝试编译为随机架构时,普通 gcc 会说没有这样的目标,比如 mips-apple-darwin。然而,llvm-gcc 实际上会在 mips 处理器上为 Mac OS X 构建编译器。

然而,这里有一个问题:要构建到随机目标,您需要已经为该目标构建的 binutils。因此,如果您有一个 llvm 可以编译到但 binutils 不能编译的目标,那么您就无法制作编译器,因为 GNU Binutils 不支持该目标。

所以...这里的问题是:是否有与 GNU Binutils 兼容的等效 llvm-binutils,例如 llvm-gcc?(意思是构建到任意目标,而不是列表中的一个。)

编辑:

任意,我的意思是我在运行 llvm-gcc 时不选择目标,我在编译 llvm-gcc 时选择目标。含义:如果我尝试为 mips-apple-darwin 编译 GCC,我会得到一个不支持的目标。但是如果我为 mips-apple-darwin 构建 llvm-gcc,只要我有 mips-apple-darwin-as 和 mips-apple-darwin-ld,它就可以工作。

0 投票
2 回答
2819 浏览

gcc - 确定 GNU binutils 的目标和架构的“正确”方法是什么?

在我的构建链中,我需要这样做:

为了将二进制文件转换为库形式。因为我希望其他人能够使用它,所以我需要知道如何在他们运行构建时从他们的工具链中获取 $BFDNAME 和 $BFDARCH。我可以通过对我已经构建的文件运行 objdump -f 在本地获取值,但是有没有更好的方法不会让我编译一次性文件只是为了获取配置值?

0 投票
1 回答
613 浏览

gnu - 来自 binutils 的 autoconf 检查 bfd 库

在 Linux 上,autoconf 2.65,binutils 2.20.0。我需要做这样的事情:

第二次检查失败,可能是由于依赖于 -lintl。

这里有人可以告诉我如何纠正它吗?非常感谢!

裂缝

0 投票
1 回答
1788 浏览

gcc - binutils ld 在使用 armv4 目标时发出 ARM BLX 指令

我希望为运行 Linux 2.6.32.2 内核的三星 S3C2440 SoC(基于 ARM920T 内核)编译 C 程序。我有一个在 ARM926EJS 上运行的现有 Gentoo Linux 安装。

我使用以下 gcc 选项为 S3C2440 编译 C 程序:

运行编译后的可执行文件(单个 printf “hello world”)后,我只是得到“非法指令”。我没有为目标编译 GDB,并且 dmesg 没有报告错误指令的地址。

我看到在可执行文件上运行“objdump -d”会列出一条显然在 ARM920T 内核上不受支持的 BLX 指令。

经过进一步调查,似乎 BLX 用于 GNU-EABI 二进制文件的 Thumb 支持,并由“ld”生成。使用 GCC 的“-c”选项进行编译似乎证实了这一点,因为目标文件的 objdump -d 输出中没有 BLX 指令。

BLX 指令会是我遇到的问题吗?如果是这样,我如何告诉“ld”不要在最终链接的可执行文件中生成 BLX 指令?


软件版本:

0 投票
1 回答
995 浏览

linux - 将附加代码合并到可执行文件中(arm-linux)

我正在尝试将一些额外的日志记录代码合并到一个静态链接的(android arm linux)可执行文件中。

(正常的跟踪方法似乎不起作用,因为它是一个守护进程,它在做任何有趣的事情之前 clone()s - 告诉 strace 跟随它只会让它崩溃)。

十六进制编辑现有代码以将跳转指令插入新代码已经过测试和工作,问题是将新代码合并到可执行文件中,这样它不会干扰现有段,并且确实被加载到一个可执行的页面。

我已经能够将所有附加代码压缩到单个目标文件部分,但无法弄清楚如何使用 objcopy(甚至 ld)以正确加载的方式合并它 - 似乎我需要调整大小并移动现有负载段,或者添加一个额外的负载段。

在共享库中添加代码可能是另一种选择,如果有办法将必要的存根添加到已链接且当前为静态的可执行文件中(然后我将在跳转指令中进行十六进制编辑到存根的已知位置,运行时然后链接器将指向添加的代码)

0 投票
1 回答
8240 浏览

gcc - GNU 链接器中 -l 和 -L 选项的顺序是否重要?

-l选项告诉链接器搜索标准目录中的库。并且-L,我们可以指定我们自己的库目录进行搜索。

问题:顺序的顺序对-L选项也很重要,就像-l链接器一样?

这个链接:http ://gcc.gnu.org/onlinedocs/gcc/Link-Options.html没有说太多关于-L.

编辑 另外,

在默认目录之前搜索命令行上指定的目录

来自手册页(正如 Dmitry 所指出的那样),这是否意味着即使我指定了如下顺序:

仍然-L会优先考虑指定的目录吗?

0 投票
1 回答
564 浏览

gcc - 将 -pie 标志传递给 gcc 时堆栈溢出

我正在尝试将 fedora 移植到 mips cpu,一些包,如“sudo”“krb5”,以下是配置生成的“sudo”的 Makefile,其中“-fpie”“-pie”标志是自动添加的。

当我尝试运行 sudo 时,发生核心转储。gdb --core core.8420 中的调用框架:

当我删除 -pie ld 标志时,一切正常,这是因为 binutils 还是 glibc 库加载器?

0 投票
1 回答
4516 浏览

gcc - 构建交叉编译 64 位 GCC 失败

我正在尝试创建一个可以在我的本地机器上运行的 gcc 交叉编译器 [Darwin new-host-2.home 10.7.4 Darwin Kernel Version 10.7.4: Mon Apr 18 21:24:17 PDT 2011; root:xnu-1504.14.12~3/RELEASE_X86_64 x86_64] 并针对 FreeBSD 8.2 x86_64(FreeBSD 术语中的 AMD64)目标。

我正在编译 gcc 4.3.1、binutils 2.19、GMP 4.2.3、MPFR 2.3.2。

我看到了一些可能出错的事情,但它们可能是红鲱鱼。为了值得我使用已知的工作脚本来构建一个交叉编译器,并只是试图让它们为 x86_64 架构工作,所以我知道我不在左边的领域..

我正在使用 gcc 编译器目标“x86_64-pc-freebsd7”,这似乎是正确的。我使用以下编译器标志:compilerConfigureFlags="--enable-version-specific-runtime-libs --enable-shared --enable-threads=posix --disable-checking --disable-libunwind-exceptions --with-system-zlib --enable-__cxa_atexit"并使用以下方式配置 binutils"--enable-64-bit-bfd"

在我的最后一个错误中;引起我注意的是'-m32',我不确定它是否应该在那里。该错误是因为 ld在搜索 -lc 时无法理解我的“不兼容”文件/Developer/Cocotron/1.0/FreeBSD/x86_64/gcc-4.3.1/x86_64-pc-freebsd7/lib/libc.a . 当我file从 FreeBSD 框中运行 libc.a 和 libc.so 时,我得到:

sh-3.2#文件/Developer/Cocotron/1.0/FreeBSD/x86_64/gcc-4.3.1/x86_64-pc-freebsd7/lib/libc.a/Developer/Cocotron/1.0/FreeBSD/x86_64/gcc-4.3.1/ x86_64-pc-freebsd7/lib/libc.a:当前 ar 存档
sh-3.2# 文件 /Developer/Cocotron/1.0/FreeBSD/x86_64/gcc-4.3.1/x86_64-pc-freebsd7/lib/libc.so /Developer/Cocotron/1.0/FreeBSD/x86_64/gcc-4.3.1/ x86_64-pc-freebsd7/lib/libc.so:ELF 64 位 LSB 共享对象,x86-64,版本 1 (FreeBSD),动态链接,剥离

最后一行我的构建死了:

o _floatundidf_s.o _floatundixf_s.o _floatunditf_s.o _divdi3_s.o _moddi3_s.o _udivdi3_s.o _umoddi3_s.o _udiv_w_sdiv_s.o _udivmoddi4_s.o unwind-dw2_s.o unwind-dw2-fde_s.o unwind-dw2-fde_s.o unwind-s.o unwind-c_s.o emutls_s.o -lc && rm -f ./libgcc_s.so && if [ -f ./libgcc_s.so.1 ]; 然后 mv -f ./libgcc_s.so.1 ./libgcc_s.so.1.backup; 否则为真;fi && mv ./libgcc_s.so.1.tmp ./libgcc_s.so.1 && ln -s libgcc_s.so.1 ./libgcc_s.so /Developer/Cocotron/1.0/FreeBSD/x86_64/gcc-4.3.1/ x86_64-pc-freebsd7/bin/ld:在搜索 -lc /Developer/Cocotron 时跳过不兼容的 /Developer/Cocotron/1.0/FreeBSD/x86_64/gcc-4.3.1/x86_64-pc-freebsd7/lib//libc.so /1.0/FreeBSD/x86_64/gcc-4.3.1/x86_64-pc-freebsd7/bin/ld:跳过不兼容的/Developer/Cocotron/1.0/FreeBSD/x86_64/gcc-4.3.1/x86_64-pc-freebsd7/lib/库。

我很惊讶 ld 无法处理它,因为当我运行这个版本的 'ld' 时,我得到了以下输出:

/Developer/Cocotron/1.0/FreeBSD/x86_64/gcc-4.3.1/x86_64-pc-freebsd7/bin/ld:支持的目标:elf64-x86-64-freebsd elf32-i386-freebsd coff-i386 efi-app-ia32 efi-bsdrv-ia32 efi-rtdrv-ia32 efi-app-x86_64 efi-bsdrv-x86_64 efi-rtdrv-x86_64 elf32-i386 elf64-x86-64 elf64-little elf64-big elf32-little elf32-big srec symbolsrec tekhex 二进制 ihex /Developer/Cocotron/1.0/FreeBSD/x86_64/gcc-4.3.1/x86_64-pc-freebsd7/bin/ld:支持的仿真:elf_x86_64_fbsd elf_i386_fbsd elf_x86_64 elf_i386 /Developer/Cocotron/1.0/FreeBSD/x86_64/gcc-4。 /x86_64-pc-freebsd7/bin/ld:仿真特定选项:elf_x86_64_fbsd:

这向我表明我已经正确构建了 binutils.. 但它无法处理 ELF 64 位 x86-64 FreeBSD 共享对象的库?

从一开始就讲述这个故事 - 编译 binutils 似乎完美无缺。

编译 GMP 和 MPFR 都给我一些 Ranlib 问题,让我有点担心,试图建立一个 .a 库但 .o 文件没有符号。这可能是正常的,但我不知道?

GMP:

/blockquote>

我得到了一些进一步的进展..

/blockquote>

MPFR:

类似的交易:

p>

还有一点。。

p>

然后我们继续使用 GCC,大概有很好的 binutils、GMP 和 MPFR.. 但最后在构建 gcc(特别是 libgcc)期间,我得到了 ld 链接失败。


更多支持信息:

我使用以下方法编译 binutils:

p>

但是,如果我切换到 -m64,我会遇到同样的问题。

p>

我使用以下方法编译 GMP 和 MPFR:

p>

我使用以下方法编译 GCC:

p>

对于所有这些,我正在使用:


在我的目标 FreeBSD 系统上,顺便说一下,它是标准的 FreeBSD 8.2 RELEASE amd64,ld 表示与我的交叉编译非常相似的功能。事实上,我的交叉编译环境的 ld 似乎处理了实际目标的 ld 处理的超集 - 让我认为我应该能够处理任何文件而不会出现我所看到的不兼容性

p>

0 投票
1 回答
985 浏览

linux - 我们应该删除在 LFS 中创建的用于安装 binutils-2.20 的构建目录吗?

我参与其中http://www.linuxfromscratch.org/lfs/view/6.6/chapter05/binutils-pass2.html)(http://www.linuxfromscratch.org/lfs/view/6.6/chapter05/binutils -pass1.html )

他们要求我再次构建 binutils?我不明白我们是否应该删除我们一开始使用的 binutils-build 目录并为此构建创建一个新目录???什么是pass 1和pass 2?我很困惑 :/

请帮忙 :)

0 投票
1 回答
1694 浏览

c - 使用调试模式构建 binutils

我正在尝试构建带有调试功能的 binutils 2.21 源代码。我的主要目的是实际调试 objdump。但为了构建它,我认为我必须构建整个包。

不幸的是,配置文件上没有调试选项。在配置之前,我尝试将 -g 和 -ggdb 添加到 CFLAGS。但是错误是:

我尝试了“make clean”和“make distclean”,但我收到了同样的错误。实际上根据以前的 CFLAGS 它之前有 -g 选项但是当我尝试在 gdb 中打开 objdump.exe 时它说

先感谢您。