首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

gcc如何找到,ld和其他binutils可执行文件?

关于gcc如何找到,ld和其他binutils可执行文件的问题,我们可以从以下几个方面来回答:

  1. 安装binutils工具包

在使用gcc编译器时,需要确保已经安装了binutils工具包。binutils包含了一系列用于处理目标文件的工具,包括链接器ld、汇编器as、反汇编器objdump等。可以使用以下命令安装binutils工具包:

代码语言:txt
复制
# Ubuntu/Debian
sudo apt-get install binutils

# CentOS/RHEL
sudo yum install binutils
  1. 设置PATH环境变量

在安装完binutils工具包后,需要确保PATH环境变量中包含了binutils的安装路径。这样,当使用gcc编译器时,它可以自动找到ld链接器和其他binutils工具。可以通过以下命令将binutils的安装路径添加到PATH环境变量中:

代码语言:txt
复制
# Ubuntu/Debian
export PATH=$PATH:/usr/bin

# CentOS/RHEL
export PATH=$PATH:/usr/bin
  1. 手动指定链接器路径

如果不想修改PATH环境变量,也可以在使用gcc编译器时手动指定链接器的路径。可以使用以下命令指定链接器路径:

代码语言:txt
复制
gcc -o output_file source_file.c -Wl,-rpath=/path/to/binutils/bin

其中,/path/to/binutils/bin是binutils的安装路径。

总之,为了让gcc编译器能够找到ld链接器和其他binutils工具,需要确保binutils工具包已经安装,并将其安装路径添加到PATH环境变量中,或者在使用gcc编译器时手动指定链接器路径。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

交叉编译学习笔记(一)——交叉编译交叉工具链

交叉编译 交叉编译是本地编译相对应的概念。交叉编译是指在当前平台下编译出在其他平台下运行的程序,即编译出来的程序运行环境与编译它的环境不一样,所以称为交叉编译(Cross Compile)。 3....此处为了将程序代码编译成可执行文件,中间涉及到了编译、链接等其他步骤,过程中依赖很多相关工具,其中最核心的便是编译器(如gcc)、链接器(ld)。...) 输出目标: 程序的可执行文件 可被其他可执行文件/库文件调用的库文件 工具:链接器(ld) 这里有一个不得不提的二进制工具集——GNU Binutils。...主要包含的工具有: ld:链接器,将多个目标文件链接成一个可执行文件/目标库文件 as:汇编器,将汇编源代码编译为机器代码 ranlib:对静态库的符号索引表进行更新 addr2line:将地址转换为行号...交叉工具链中,gcc编译器、ld链接器以及其他的相关工具,都是用来跨平台交叉编译的。 交叉工具链与本地工具链类似,也有交叉编译版本的gcc, ld, as等工具,与本地工具链两两对应。

5.3K70

9个基本的GNU binutils 工具【Linux-Command-line】

可执行文件通常需要外部函数,这些函数通常来自系统库(libc)。 可以使用ld命令直接调用链接器; 但是,此命令有些复杂。...(你需要探索如何使用ld命令进行链接) 屏幕快照 2019-11-19 下午6.15.33.png 运行此命令后,你应该看到一个名为“a.out”的可执行文件: 屏幕快照 2019-11-19 下午6.16.40...继续阅读以了解其他七个以上粗体突出显示的GNU binutils软件包工具。 readelf:显示有关ELF文件的信息 上面的练习提到了术语“目标文件”可执行文件”。...”相似,但是其中包含一些其他信息: 目标文件“hello.o”具有以下指令:callq e 可执行文件“a.out”包含以下指令以及地址函数:callq 400400 上面的汇编指令正在调用...为此编写另一个测试程序; 只有这一次才能确保使用gcc的“-g”标志进行编译,这将为二进制文件添加其他调试信息,并且包含行号(在此处的源代码中提供)也将有所帮助: 屏幕快照 2019-11-20 下午

4.2K50
  • Linux 程序编译过程详解

    Binutils 一组二进制程序处理工具,包括:addr2line、ar、objcopy、objdump、as、ld、ldd、readelf、size等。...链接 链接也分为静态链接动态链接,其要点如下: 静态链接是指在编译阶段直接把静态库加入到可执行文件中去,这样可执行文件会比较大。...以Hello World为例: 如果使用命令“gcc hello.c -o hello”则会使用动态库进行链接,生成的ELF可执行文件的大小(使用Binutils的size命令查看)链接的动态库(使用...dec hex filename 1183 552 8 1743 6cf hello $ ldd hello //可以看出该可执行文件链接了很多其他动态库...-64.so.2 (0x00007fadce14c000) 如果使用命令“gcc -static hello.c -o hello”则会使用静态库进行链接,生成的ELF可执行文件的大小(使用Binutils

    1.8K30

    Linux 程序编译过程的来龙去脉

    Binutils 一组二进制程序处理工具,包括:addr2line、ar、objcopy、objdump、as、ld、ldd、readelf、size等。...4.链接 链接也分为静态链接动态链接,其要点如下: 静态链接是指在编译阶段直接把静态库加入到可执行文件中去,这样可执行文件会比较大。...以Hello World为例: 如果使用命令“gcc hello.c -o hello”则会使用动态库进行链接,生成的ELF可执行文件的大小(使用Binutils的size命令查看)链接的动态库(使用...dec hex filename 1183 552 8 1743 6cf hello $ ldd hello //可以看出该可执行文件链接了很多其他动态库...-64.so.2 (0x00007fadce14c000) 如果使用命令“gcc -static hello.c -o hello”则会使用静态库进行链接,生成的ELF可执行文件的大小(使用Binutils

    2.9K30

    Linux 程序编译过程详解

    Binutils一组二进制程序处理工具,包括:addr2line、ar、objcopy、objdump、as、ld、ldd、readelf、size等。...4.链接链接也分为静态链接动态链接,其要点如下:静态链接是指在编译阶段直接把静态库加入到可执行文件中去,这样可执行文件会比较大。...以Hello World为例:如果使用命令“gcc hello.c -o hello”则会使用动态库进行链接,生成的ELF可执行文件的大小(使用Binutils的size命令查看)链接的动态库(使用Binutils...filename 1183 552 8 1743 6cf hello$ ldd hello //可以看出该可执行文件链接了很多其他动态库,主要是Linux...-64.so.2 (0x00007fadce14c000)如果使用命令“gcc -static hello.c -o hello”则会使用静态库进行链接,生成的ELF可执行文件的大小(使用Binutils

    1.9K30

    Linux命令(65)——ld命令

    1.命令简介 ld命令是二进制工具集GNU Binutils的一员,是GNU链接器,用于将目标文件与库链接为可执行程序或库文件。...用于提供其他工具的兼容性 -h:对于ELF格式共享对象,设置 DT_SONAME 名称 -I,--dynamic-linker=:指定动态链接器。...当链接大型可执行文件时,如果ld耗尽内存空间,则可能需要使用该选项 -O :对于非零的优化等级,ld将优化输出。此操作会比较耗时,应该在生成最终的结果时使用。...-L/usr/lib -lstdc++ -lm -lgcc_s -lc -lgcc main.o test.o -o test.out 因为生成一个C++可执行文件,需要依赖很多系统库相关的目标文件...lib -lstdc++ -lm -lgcc_s -lc -lgcc main.o test.o 参考文献 [1]ld manual [2]GNU Binutils [3]使用ld命令链接目标文件生成可执行文件

    17.4K13

    GCC、ARM-LINUX-GCC、ARM-ELF-GCC浅析

    二、GCC内部结构: GCC内部结构主要由Binutilsgcc-core、Glibc等软件包组成。 1. Binutils:它是一组开发工具,包括连接器,汇编器其他用于目标文件档案的工具。...【这个包GCC编译生成的库,前辈们为了方便大家开发,就把Glibc放到GCC中】 举例描述下上面3个包是如何进行运作的。...\n"); return 0; }/* 何问起 hovertree.com */ $ gcc -o test test.c编译生成test可执行文件。...gcc编译流程分为四个步骤:预处理、编译、汇编、链接。个人认为预处理编译主要由gcc-core来完成,汇编链接主要由Binutils来完成。那么何时用到glibc呢?...总的来说,如果真正了解了上面3个软件包的作用,自然就明白GCC如何工作的。

    6.7K10

    关于gcc、glibcbinutils模块之间的关系

    一、关于gcc、glibcbinutils模块之间的关系 1、gcc(gnu collect compiler)是一组编译工具的总称。...2、binutils提供了一系列用来创建、管理维护二进制目标文件的工具程序,如汇编(as)、连接(ld)、静态库归档(ar)、反汇编(objdump)、elf结构分析工具(readelf)、无效调试信息符号的工具...通常,binutilsgcc是紧密相集成的,没有binutils的话,gcc是不能正常工作的。 3、glibc是gnu发布的libc库,也即c运行库。...可以通过GCC_EXEC_PREFIX来设定 (3)LIBRARY_PATH环境变量中所设定的路径,或编译的命令行中指定的-L/usr/local/lib (4)binutils中的ld所设定的缺省搜索路径顺序.../ Linux平台gcc动态共享库的基础知识

    2.5K91

    mac 编译问题解决——building for macOS-x86_64 but attempting to link with file built for xxx

    在编译TVM的一个fork版本时,遇到下面的报错: ld: warning: ignoring file libbacktrace/lib/libbacktrace.a, building for...在Mac下,有两套编译工具链,GNU的Apple(通过Xcode安装)的,GNU的以gcc为代表,而Apple的则以clang为代表,在这两个核心编译工具周围,又有很多别的小的编译工具。...可以看到,找到的是GPN版本的ranlib,而不是跟编译工具匹配的Apple的ranlib(路径是/usr/bin/ranlib)。...:/usr/local/opt/binutils/bin:/usr/bin:... 所以在搜索可执行文件时,先找到了GNU的ranlib,而这个又与Apple的编译工具链不兼容。导致编译出错。...它帮助编译器链接器在链接时更快地查找和解析符号。当一个程序需要链接静态库时,链接器会使用ranlib创建的索引来确定静态库中包含的符号,以便正确地链接程序。

    62420

    ​在tinycolinux32上装tinycolinux64 kerneltoolchain

    GCC产生的程序需要运行在配有当初与GCC一起产生的binutils中的LD的host平台中运行等,如此种种,etc...........猜这是因为在.config文件中同时开启了3264支持,32位程序能运行在64位上,且原来的rootfs中的32位binutilsgcc未变。...如果把64位某linux的程序拷进来file它显示64bit elf,执行它会提示not found,这是因为它依赖的binutils ld没有,调用gcc -o helloworld.c -64m,提示...如果将这两个软件包分别解压到GCC源码树的根目录下,并分别命名为"gmp""mpfr" ) 1)首先编译binutils: cd binutils-2.20 && sudo make b && cd.../a $@ (ld-linux-x86-64.so.2也是从工具链中找到的,它其实可以被执行,你也可以定制上面的--library-path) 执行./runa,输出跟静态b一样的结果。

    83020

    Hello World背后的故事:如何在Linux上编译C语言程序

    复杂软件的构建过程会包括一系列活动: 从版本控制系统(比如git)上获取最新的源代码 编译当前源代码、检查所依赖的其他库或模块 执行各类测试,比如单元测试 链接(Link)所依赖的库或模块 生成可执行文件...GNU Binutils:一组二进制工具集,包括链接器ld、汇编器as等,GNU Bintuils可以GCC、GNU Make一起完成构建过程。我们将在下文使用这些工具。...综上,GCC在Linux操作系统占有举足轻重的地位。 好,我们开始了解一下如何使用GCC编译hello.c文件。...printf()方法属于libc库,上面的命令并没有体现出来如何将hello.o团队libc库链接的过程。...对于我来说,超出我以往知识范畴的点包括:如何链接、静态链接动态链接、main()之前操作系统编译器所做的工作等等。

    1.8K11

    深入浅出GCC编译器

    本文将带你迈入GCC的大门,了解一个C源文件是如何GCC编译工具链的加工下成为一个可执行性文件的,并详细讲解GCC编译参数以及可能会用到的其他知识。...一、GCC交叉编译工具链 GCC编译工具链包含了GCC编译器在内的一整套工具,主要包含了GCC编译器、Binutils工具集、glibc标准函数库。...Binutils工具集 (1)链接器与汇编器 binutils(bin utility,GUN二进制工具集),GNU binutils是一组二进制工具集。...工具集默认在目录 /usr/bin 目录下,在这个工具集中我们必须要知道的工具有两个:ld 链接器 as 汇编器。这两个工具和我们编译一个源文件息息相关。...进行链接,生成可执行文件,这一步不需要任何选项参数 这里要提醒一下,如果你不指定可执行文件后缀,gcc会默认生成一个 a.out ,也就是说,只要你不指定可执行文件名及后缀,那么你编译任何源文件

    23610

    程序一定要从main函数开始运行吗?

    对于静态链接先提出两个问题: Q: 每个目标文件都有好多个段,目标文件在被链接成可执行文件时,输入目标文件中的各个段如何被合并到输出文件?...Q: 链接器如何为他们分配在输出文件中的空间地址?...如何指定程序入口 在ld链接过程中使用-e参数可以指定程序入口,由于一段简短的printf函数其实都依赖了好多个链接库,我们也不太方便使用链接脚本将目标文件与所有这些依赖库进行链接,所以使用下面这段内嵌汇编的程序来打印一段字符串.../test hello 如何使用自定义链接脚本实现自定义段的功能 在ld链接过程中使用-T参数可以指定链接脚本,通过ld -verbose可以查看默认的链接脚本,原文太长,这里简单截取了一部分: $...ld -verbose GNU ld (GNU Binutils for Ubuntu) 2.30 Supported emulations: elf_x86_64 elf32_x86_

    1.2K30
    领券