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

gcc链接器如何根据32位/64位的不同来决定连接哪个libc?

gcc链接器根据32位/64位的不同来决定连接哪个libc是通过以下方式实现的:

  1. 在编译过程中,gcc会根据目标平台的架构(32位或64位)选择对应的默认libc版本。对于32位系统,通常会选择连接32位的libc;对于64位系统,通常会选择连接64位的libc。
  2. gcc链接器会根据编译器的命令行参数和环境变量来确定使用哪个libc版本。常用的命令行参数包括"-m32"和"-m64",分别用于指定连接32位或64位的libc。环境变量如LIBRARY_PATH和LD_LIBRARY_PATH也可以用于指定库文件的搜索路径。
  3. 在链接过程中,gcc链接器会根据目标文件中的符号表信息来确定需要连接的库文件。符号表中记录了程序中使用的函数和变量的信息,链接器会根据这些信息来解析和连接对应的库文件。
  4. 对于一些特殊情况,可以通过使用"-static"参数来强制链接静态库,或使用"-dynamic-linker"参数来指定动态链接器的路径。

总结起来,gcc链接器根据编译器的命令行参数、环境变量和目标文件中的符号表信息来决定连接哪个libc版本。具体选择哪个版本的libc取决于目标平台的架构(32位或64位)。在腾讯云的云计算服务中,可以使用腾讯云提供的CVM(云服务器)来进行开发和部署,相关产品和产品介绍链接地址如下:

  1. 腾讯云云服务器(CVM):提供高性能、可扩展的云服务器实例,支持多种操作系统和应用场景。详情请参考:https://cloud.tencent.com/product/cvm
  2. 腾讯云云函数(SCF):无服务器计算服务,支持按需运行代码,无需关心服务器的管理和维护。详情请参考:https://cloud.tencent.com/product/scf
  3. 腾讯云容器服务(TKE):基于Kubernetes的容器管理服务,提供高可用、弹性伸缩的容器集群。详情请参考:https://cloud.tencent.com/product/tke
  4. 腾讯云对象存储(COS):安全可靠的云端存储服务,适用于存储和管理各种类型的数据。详情请参考:https://cloud.tencent.com/product/cos

请注意,以上仅为腾讯云的部分云计算产品,更多产品和详细信息请参考腾讯云官方网站。

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

相关·内容

【linux学习指南】Linux编译 gcc和g++使用

前言 预处理(进行宏替换) 编译(生成汇编) 汇编(生成机器可识别代码) 连接(生成可执行文件或库文件) gcc如何完成 格式 :gcc [选项] 要编译文件 [选项] [目标文件] 预处理(进行宏替换.../lib64/ld-linux-x86-64.so.2: 这是动态链接(或加载),负责在程序运行时加载所需共享库并进行链接。它加载地址是 0x00007f11a5540000。...-al -rw-r--r-- 1 root root 5105516 Jun 4 23:05 /lib64/libc.a [wks@hcss-ecs-ab43 ~]$ 这是要求gcc必须进行静态连接...,连接对应静态库 动态库与之相反,在编译链接时并没有把库文件代码加入到可执行文件中,而是在程序执行时由运行时 链接文件加载库,这样可以节省系统开销。...O0 O1 O2 O3 编译优化选项4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高 w 生成任何警告信息。 Wall 生成所有警告信息。

17610

浅谈Linux动态链接

这里提到地址指的是进程在内存上虚拟地址。动态链接函数地址在编译时是不确定,在装载时,装载根据当前地址空间情况,动态地分配一块虚拟地址空间。 而静态链接库其实是在编译时就确定了库函数地址。...这些位置动态链接库很多,如果链接每次都去这些路径遍历一遍,非常耗时,Linux提供了ldconfig工具,这个工具会对这些路径动态链接库按照SONAME规则创建软连接,同时也会生成一个缓存Cache...到/etc/ld.so.cache文件里,链接根据缓存可以更快地查找到各个.so文件。...我们前面曾提到,Linux有个约定速成规则,假如库名是name,那么动态链接库文件名就是libname.so。在使用GCC编译链接时,-lname来告诉GCC使用哪个库。...链接时,GCC链接ld就会前往LD_LIBRARY_PATH环境变量、/etc/ld.so.cache缓存文件和/usr/lib和/lib目录下去查找libname.so。

9K30
  • 【linux】gcc makefile

    01.gcc如何完成 预处理(进行宏替换) 预处理功能主要包括宏定义,文件包含,条件编译,去注释等。 预处理指令是以#号开头代码行。...实例: gcc test1.o –o test1 我们可以指定可执行文件文件名 cpp文件:以cpp或者cc为后缀,不能用gcc编译,用g++编译 02.gcc选项 -E 只激活预处理,这个生成文件...-O0 -O1 -O2 -O3 编译优化选项4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高 -w 生成任何警告信息。...静态链接 定义:在静态链接中,链接(如GNU ld)将所有用到库文件内容复制到最终可执行文件中。...如果test.c 更新过或 mytest 不存在,会执行 gcc -o mytest test.c。 make工具使用文件时间戳来决定哪些目标需要重新构建。

    5310

    C语言为什么只需要include就能使用里面声明函数?

    要明白包含即可用原因,就必须讲到C语言代码是如何变成可执行文件了,这里可以参考《hello程序是如何变成可执行文件》。...链接时候,链接会知道,诶,你这个程序需要printf函数啊?好,我去libc.so里面找找,看看有没有哈。,巧了,还真有,恭喜你可以用。...但是有一个非常重要前提: 编译默认链接libc库(或者类似的库) 如果没有这个前提,就不会是包含即可用。 实际上,这一点我已经在《一个奇怪链接问题》中提到过了。...通常stdio.h中函数,基本都在libc库中,因此都可以用。包含,但是自己声明调用,同样可以用,当然并不推荐这样做。 所以最终决定你能不能用,是要看自己有没有定义以及其他地方有没有定义。...为便于理解,本文涉及太多具体编译链接知识,有兴趣可以自行扩展。

    1.3K20

    【Linux】手把手教你从零上手gccg++编译

    )生成 .o 文件 [汇编as] 连接目标代码, 生成可执行程序 [链接ld] gcc操作选项 -E 只激活预处理,这个生成文件,需要自己手动把它重定向到一个输出文件里面 -S 编译到汇编语言不进行汇编和链接...,-O1为缺省值,-O3优化级别最高 -w 生成任何警告信息 -Wall 生成所有警告信息 gcc/g++是如何工作 注:本文中会使用大量Linux中指令操作还有vim文本编辑使用...“/usr/lib”下进行查找, 也就是链接libc.so.6 库函数中去, 这样就能实现函数“printf”了, 而这也就是链接作用。...看概念有些抽象,我们依然来举个例子,如下图所示: 根据上面的例子也很容易总结出动态库和静态库特点: 在编译器使用静态库进行静态连接时候,会将自己方法拷贝到目标程序中,该程序以后不用再依赖静态库...验证Linux下动态库和静态库连接 验证gcc 在编译时默认使用动态库: 我们手动要求程序连接静态库: gcc默认生成二进制程序,是动态链接

    12610

    linux下 lib文件学习思考

    2.ldconfig ldconfig 命令作用是决定位于目录/usr/lib和/lib下共享库所需运行链接。这些链接保存在Libs保存在/et/ld.so.conf文件中。...(1)命令格式 ldconfig [选项] [libs] (2)主要选项  -v或--verbose ldconfig将显示正在扫描目录、搜索到动态链接库,以及它所创建连接名字。 ...-n ldconfig仅扫描命令行指定目录,扫描默认目录(/lib、/usr/lib),也扫描配置文件/etc/ld.so.conf所列目录。 ...-l test -o test l       测试是否动态连接,如果列出libtest.so,那么应该是连接正常了 $ ldd test l       执行test,可以看到它是如何调用动态库中函数...2、当搜索库文件目录下同时存在该库静态版本和共享版本时,链接优先使用共享版本.so,此时你可以使用-static链接选项指定链接静态版本.a。

    2.6K20

    GCC -l选项:手动添加链接

    最近研究C语言CRC循环冗余校验,找到一个开源库: lammertb/libcrc 其中有实例代码,但是无论如何运行起来,报错如下: [root@frytea-dev-test examples]#...究竟如何手动连接库呢,找到了一篇文章: GCC -l选项:手动添加链接库 下面简单记录: 标准库大部分函数通常放在文件 libc.a 中(文件名后缀 .a 代表“achieve”,译为“获取”),或者放在用于共享动态链接文件...当使用 GCC 编译和链接程序时, GCC 默认会链接 libc.a 或者 libc.so,但是对于其他库(例如非标准库、第三方库等),就需要手动添加。...---- 如多要连接其他目录中库怎么办呢? 通常,GCC 会自动在标准库目录中搜索文件,例如 /usr/lib,如果想链接其它目录中库,就得特别指明。...有三种方式可以链接GCC 搜索路径以外链接库,下面我们分别讲解。 1) 把链接库作为一般目标文件,为 GCC 指定该链接完整路径与文件名。

    2.5K20

    吴章金:通过操作 Section 为 Linux ELF 程序新增数据

    .string 这行用来指定动态链接完整路径。 稍微延伸两点: .string 可以替换为 .incbin file,然后把字符串内容放到名为 file 文件中。...需要补充是,本文介绍 .interp 是一个比较特殊 Section,链接时能自动处理,如果是新增了一个全新 Section 类型,那么得修改链接脚本,明确告知链接需要把 Section 放到程序头哪个...再补充一种方式,举个例子,上面用到动态链接来自 libc6:i386 这个包: $ dpkg -S /lib/i386-linux-gnu/ld-linux.so.2 libc6:i386: /lib...$ dpkg -S /lib32/ld-linux.so.2 libc6-i386: /lib32/ld-linux.so.2 两个包提供动态链接路径完全不一样,那就得替换掉动态编译,要重新编译.../libhello.so hello 上面几组指令先把 .interp Section 取出来存到 interp.txt 文件中,再替换掉其中动态链接路径,最后再把新文件内容更新进共享库。

    2.8K10

    动态库依赖关系_查看运行动态库

    1 前言 这两天在编写一个插件系统Demo时候,发现了个很奇怪问题:插件加载中已经链接了ld库,但是应用程序在链接插件加载时候,却还需要显式链接ld库。...这个报错就很搞事了,你说你明明知道需要哪个库,为什么直接帮我链接呢,非得我显示在命令行中指定呢?...不是搞事吗,你明明知道我需要连接libB.so为啥就不帮我链接上去呢?...3 答案 答案很简单,那就是GCC就是想要你显式链接呗。(你是编译,你牛好吧。)那这是为啥呢?...当打开了这个选项时候,编译链接时候是不会递归去获取依赖动态库依赖项,于是就会出现上述问题。

    2.1K10

    【Linux】编译-gccg++

    今日更新了Linux编译gcc、g++内容 欢迎大家关注点赞收藏⭐️留言 编译-gcc/g++ 我们直接用自带gcc编译会编译不了,因为当前版本太低了,有些语法不支持。...实例: gcc –c hello.s –o hello.o 连接(生成可执行文件或库文件) 在成功编译之后,就进入了链接阶段。...最后答案是:系统把这些函数实现都被做到名为 libc.so.6 库文件中去了,在没有特别指定时,gcc 会到 系统默认搜索路径“/usr/lib”下进行查找,也就是链接libc.so.6 库函数中去...动态库一般后缀名为“.so”,如前面所述 libc.so.6 就是动态库。 gcc 在编译时默认使用动态库。完成了链接之后,gcc 就可以生成可执行文件,如下所示。...gcc选项 -E 只激活预处理,这个生成文件,你需要把它重定向到一个输出文件里面 -S 编译到汇编语言不进行汇编和链接 -c 编译到目标代码-o 文件输出到 文件 -static 此选项对生成文件采用静态链接

    10710

    【Linux探索学习】第八弹——Linux工具篇(三):Linux 中编译 GCC 编译原理和使用详解

    Linux下vim编辑:【Linux探索学习】第七弹——Linux工具(二):Linux下vim编辑使用详解-CSDN博客 前言: 在上一篇我们学习了如何在Linux环境下直接用vim编辑来进行编辑代码...,今天我们来学习如何运行我们所编辑代码,运行代码就需要编译,也就是我们下文要讲gcc编译 提醒:本文是在Ubuntu系统下进行操作 一、什么是GCC GCC 是一个开源编译,它由 GNU...二、背景知识 在我们正式讲解GCC如何编译及其背后原理之前,我们先来了解一个背景知识,这个在我们之前用VS学习C语言和C++时候是学过,那就是——我们所编写代码是如何经编译处理一步步生成一个可执行程序并得到执行...编译会将每个源文件解析成相应汇编指令。此过程包括以下几个步骤: 词法分析:将源代码分解成 tokens(词法单元)。 语法分析:根据语言语法规则检查语句正确性。...其实系统把这些函数实现都被做到名为 libc.so.6 库文件中去了,在没有特别指定时,gcc 会到 系统默认搜索路径“/usr/lib”下进行查找,也就是链接libc.so.6 库函数中去,

    15210

    GCC写个库给你玩,就这?

    前言 什么是GCC GCC原名为 GNU C语言编译GCC」(GNU Compiler Collection,GNU编译套件) 是由GNU开发编程语言编译。...g++ -v g++ --version gcc和g++区别 gcc和g++ 都是GNU (组织)一个编译。...gcc, 对于C++代码,两者是等价,但是因为gcc命令不能自动和C++程序使用库联接,所以通常用g++来完成链接,为了统一起见,干脆编译/链接统统用g++了 ,这就给人一种错觉,好像 cpp 程序只能用...则该宏就是未定义,否则,就是已定义 ■ 误区三:编译只能用gcc,链接只能用g++ 严格来说,这句话不算错误,但是它混淆了概念,应该这样说:编译可以用gcc/g++,而链接可以用g++ 或者gcc -...c 通知gcc取消连接步骤,即编译源码,并在最后生成目标文件 -w 产生任何警告信息 -Wall 使gcc对源文件代码有问题地方发出警告 -Idir 指定 include 包含文件搜索目录 -Ldir

    1.1K10

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

    二、GCC内部结构: GCC内部结构主要由Binutils、gcc-core、Glibc等软件包组成。 1. Binutils:它是一组开发工具,包括连接,汇编和其他用于目标文件和档案工具。...【这个包GCC编译生成库,前辈们为了方便大家开发,就把Glibc放到GCC中】 举例描述下上面3个包是如何进行运作。...总的来说,如果真正了解了上面3个软件包作用,自然就明白GCC如何工作。...GCC一般工具通常都是通过在命令行上调用命令(如gcc)来执行。在使用交叉编译情况下,这些工具将根据它编译目标而命名。...好了,卖关子了,入正题,因为我们知道X86跟ARM所使用指令集是不一样,所以所需要binutils肯定不一样咯;上面提到过gcc-core是依赖于binutils,自然ARM跟X86所使用gcc-core

    6.7K10

    Linux编译-gccg++使用

    1.编译过程 一个程序编译一般分为4个过程: 1.预处理(进行宏替换) 2.编译(生成汇编) 3.汇编(生成机器可识别代码) 4.连接(生成可执行文件或库文件) 2. gcc如何完成 格式 gcc...: gcc –c test.s –o test.o 结果gcc-c选项之后,生成了一个test.o文件,文件内部就是二进制,但由于vim是文本编辑,所以识别不出来。...最后答案是 : 系统把这些函数实现都被做到名为 libc.so.6 库文件中去了 , 在没有特别指定时 ,gcc 会到 系统默认搜索路径“/usr/lib” 下进行查找 , 也就是链接到...动态库一般后缀名为 “.so”, 如前面所述 libc.so.6 就是动态 库。gcc 在编译时默认使用动态库。完成了链接之后 ,gcc 就可以生成可执行文件 , 如下所示。...gcc默认连接方式是动态连接,如果想进行静态连接,则需要使用-static选项。 gcc -o b.out -static 今天分享到这里就结束,感谢大家阅读!

    17810

    自定义规则实现将多个静态库合并为一个动态库或静态库

    libA.a libB.a libC.a -Wl,--no-whole-archive -Wl,-soname -o libcombined.so “注:-Wl,option 后面接选项最终会作为链接...在编写规则中我们就需要获取当前编译,我们不能直接使用固定路径,比如 Linux 下 /usr/bin/gcc,因为可能是交叉编译,路径就不一样了。...它将其注册在依赖关系图中,因为一个 Action 可以依赖于另一个 Action 输出(例如,在 C 语言中,必须在编译后调用链接)。在执行阶段,Bazel 会决定必须以何种顺序运行哪些操作。...如前言中讲到,如果是交叉编译呢? 那我们还需要在规则中获取到当前编译信息,包括 gcc、ld、ar 工具。...目标 A 依赖目标 E 信息在 CcInfo 结构体内,这里先展开如何获取了,这里只做个提示: x = dep_target[CcInfo].linking_context.linker_inputs.to_list

    5.3K20

    Linux下动态库(.so)和静态库(.a) 区别

    静态库代码在编译时链接到应用程序中,因此编译时库文件必须存在,并且需要通过“-L”参数传递给编译,应用程序在开始执行时,库函数代码将随程序一起调入进程内存段直到进程结束,其执行过程不需要原静态库存在...动态函数库改变并不影响你程序,所以动态函数库升级比较方便 不同UNIX系统,链接动态库方法,实现细节不一样 编译PIC型.o中间文件方法一般是采用C语言编译-KPIC或者-fpic选项...最主要GCC命令行一个选项: -shared 该选项指定生成动态连接库(让连接生成T类型导出符号表,有时候也生成弱连接W类型导出符号),不用该标志外部程序无法连接。...:表示要连接库在当前目录中 -ltest:编译查找动态连接库时有隐含命名规则,即在给出名字前面加上lib,后面加上.so来确定库名称 LD_LIBRARY_PATH:这个环境变量指示动态连接可以装载动态库路径...隐式调用动态库和静态库使用方法一致,使用静态库和使用动态库编译成目标程序使用gcc命令完全一样,那当静态库和动态库同名时,gcc命令会使用哪个库文件呢?

    17.1K21

    深入浅出GCC编译

    本文将带你迈入GCC大门,了解一个C源文件是如何GCC编译工具链加工下成为一个可执行性文件,并详细讲解GCC编译参数以及可能会用到其他知识。...④ 链接 调用 ld 进行链接,生成可执行文件,这一步不需要任何选项参数 这里要提醒一下,如果你指定可执行文件名和后缀,gcc会默认生成一个 a.out ,也就是说,只要你指定可执行文件名及后缀...也就是说,出现这个错误原因是,gcc编译找不到test.h这个文件,它不知道这个文件在哪个目录下。...那么上面问题解决方法就是加 -I 选项,可以使用相对路径或决定路径: 相对路径 gcc main.c test.c -o main -I .....GCC提供了非常丰富警告,但是如果你启用这些警告的话,GCC编译是不会报告检测到警告信息

    31810

    gcc编译参数_gcc for c4droid

    执行过程 虽然我们称Gcc是C语言编译,但使用gcc由C语言源代码文件生成可执行文件过程不仅仅是编译过程,而是要经历四个相互关联步骤∶预处理(也称预编译,Preprocessing...接着调用cc1进行编译,这个阶段根据输入文件生成以.o为后缀目标文件。 (3)....最重要是传gcc -shared 参数使其生成是动态库而不是普通执行程序。 -Wl 表示后面的参数也就是-soname,libhello.so.1直接传给连接ld进行处理。...实际上,每一个库都有一个soname,当连接发现它正在查找程序库中有这样一个名称,连接便会将soname嵌入连结中二进制文件内,而不是它正在运行实际文件名,在程序执行期间,程序会查找拥有 soname...这也进一步说明了动态库在程序运行时是需要。 我们回过头看看,发现使用静态库和使用动态库编译成目标程序使用gcc命令完全一样,那当静态库和动态库同名时,gcc命令会使用哪个库文件呢?

    96130

    buildroot是什么_yocto buildroot

    libc里,名字不一样而矣, staging:软链接到host//sysroot/ 就是上面说到文件系统需要库等目录,方便查看 images:生成文件系统,内核在此处, target...最好跟你要编译内核一致,如果提供选项上没有就选Manually specified,然后在linux version项填版本号, 看官网说明,这些头文件是libc库编译文件时用来连接内核,C库用该头文件来构建用户空间与内核通信接口...make -rebuild:更改代码文件后重新编译使用 2.5.4 如何查询要使用包 make external-deps:列出所有要用源码包.当你不知道要下载哪个包时可以查询等...,看了下,gcc链接链接到一个toolchain-wrapper,估计是这个文件处理之后又找到arm-linux-gcc.br_real,后来仔细一看提示发现目录也不对呀,我只好在4.9.3下加个...header libc 指令集 fs kernel hello.c编译执行情况 arm-buildroot-gcc 4.9.3 3.6.6 eglibc arm Y N N arm-buildroot-gcc

    1.3K20

    【Linux】 开始使用 gcc 吧!!!

    Linux 1 认识gcc 我们在windows环境和macos环境里都有功能强大集成开发环境(IDE)供我们使用 ,但是在Linux中我们如何编译运行我们代码呢?...答案是: 系统把这些函数实现都被做到名为 libc.so.6 库文件中去了,在没有特别指定时,gcc 会到系统默认搜索路径“/usr/lib”下进行查找,也就是链接libc.so.6 库函数中去...动态库一般后缀名为“.so”,如前面所述 libc.so.6 就是动态库。 gcc 在编译时默认使用动态库。...5 gcc 基本选项 E 只激活预处理,这个生成文件,你需要把它重定向到一个输出文件里面 -S 编译到汇编语言不进行汇编和链接 -c 编译到目标代码 -o 文件输出到 文件 -static 此选项对生成文件采用静态链接...-O0 -O1 -O2 -O3 编译优化选项4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高 -w 生成任何警告信息。

    15110
    领券