GCC详解的-Wl选项说明与测试

【GCC】参数选项笔记|-Wl,-soname|include宏定义和易错地方 -Wl,-soname (原文:https://blog.youkuaiyun.com/gohome520/article/details/7259450) -Wl选项告诉编译器将后面的参数传递给链接器。 -soname则指定了动态库的soname(短名,Short for shared object name) -Wl 表示后面的参数也就是-soname,libhello.so.1直接传给连接器ld进行处理。每一个库都有一个soname,当连接器发现程序库(如:libhello_v1.so)中有soname 阅读详情
AI摘要

本文详细介绍了如何在GCC编译过程中通过-Wl选项将命令行参数传递给ld链接器,包括-I, -L, -l选项的使用,以及-Wl,-Bstatic和-Wl,-Bdynamic的区别。实例演示了如何设置运行路径和链接库的方式。

在GCC编译程序时,由于GCC命令不仅能够编译,也能够链接程序,GCC链接程序是通过ld命令实现。那如何将GCC的命令行参数传递给ld命令呢。通常在编译时通过使用-Wl这个选项来实现的。

测试例程

测试例程如下:(libc.so.6是复制/lib下到当前路径下)

编译

  gcc -o test test.c -I. -L. -lc -Wl,-rpath=.   

其中
-I. 是指定头文件路径为当前目录下;
-L. 是指定库文件路径为当前目录下;
-lc 是从-L指定库文件路径下去找libc.so.6这个库,也就是库名砍头去尾(类似使用过-lpthread)
-Wl,-rpath=. 为告诉编译器将后面的参数传递给链接器>

-Wl,其格式如下:

  gcc -Wl,param1,param2,param3,...

在调用ld命令时,会等效于如下:

  ld param1 param2 param3 

注意:-Wl, 后的逗号(,)必不可少,如果要传递多个参数,参数之间间用逗号,分隔

-Wl,-Bstatic

指定后续ld在处理 -l 参数来链接库文件的链接方式首选静态库

-Wl,-Bdynamic

指定后续ld在处理 -l 参数来链接库文件的链接方式首选动态库

例如: -Wl,-Bstatic -la -lb -lc -Wl,-Bdynamic -ld -le

会被解释成 :ld liba.a libb.a libc.a libd.so libe.so

-Wl,-rpath -Wl,/home/yimning/linux/rpatch_test/

会被解释成:ld -rpath /home/yimning/linux/rpatch_test/

查看关联库指向与rpatch(编译之后)

此时查看libc.so.6的依赖库路径变为./libc.so.6
查看test的文件信息如下这一行:
0x000000000000001d (RUNPATH) Library runpath: [.]

arm-eabi-gcc 与 arm-none-eabi-gcc 区别详解:嵌入式裸机工具链选型与安装 在嵌入式开发中,交叉编译工具链是连接源代码与目标硬件的关键桥梁。对于基于 Cortex-M 系列芯片的裸机项目,如 STM32、GD32 等,开发者常遇到 arm-eabi-gcc 与 arm-none-eabi-gcc 两种命名,二者虽同属 EABI 规范,但“none”字段明确指向无操作系统的裸机场景。理解 ABI 与 EABI 的底层原理,能够帮助开发者避免因工具链错配而导致的编译失败或固件异常。从工程实践角度看,正确选择并安装匹配的 GNU 工具链,是实现高效开发与调试的基础,无论是老工程迁移还是新 阅读详情

相关推荐

STM32 Cortex-M3 GCC 编译选项优化实战:-mcpu、-mthumb 对函数调用与性能的影响

本文深入探讨了STM32 Cortex-M3开发中GCC编译选项`-mcpu=cortex-m3`和`-mthumb`对函数调用与性能的影响。通过分析AAPCS规范下的寄存器使用、指令集优化以及不同优化等级的效果对比,提供了提升嵌入式系统性能的实用建议和调试技巧,帮助开发者充分发挥Cortex-M3架构潜力。

weixin_34284188的博客 466

GCC详解-gcc之-Wl选项

1、介绍 -Wl后面的东西是作为参数传递给链接器ld的。比如: gcc -Wl,aaa,bbb,ccc 最后会被解释为: ld aaa bbb ccc 2、-Wl,-Map=xxx.txt 生成map文件 如下会生成map文件mymap.txt。 gcc -Wl,-Map=mymap.txt -g main.c -o main 3、-Wl,-Bstatic 和 -Wl,-Bdynamic 指定链接动态库或者静态库 -Wl,-Bstatic -laaa -lbbb -lccc.

1万+

CentOS多版本GCC管理:GCC Toolset原理与实操指南

在Linux服务器上,编译工具链是软件构建的基石,而同一系统共存多个GCC版本是很多开发者的刚需。系统自带的GCC往往因为版本偏旧,难以支持C++17/20等新标准,直接替换又有破坏系统依赖的风险。GCC Toolset作为Red Hat体系下的官方多版本解决方案,通过独立目录和动态环境变量隔离,让新老编译器各自安好、按需切换。其核心机制是使用scl enable命令临时激活指定工具集,配合LD_LIBRARY_PATH管理动态库路径,从而实现不同项目的精准编译与运行。无论是适配CUDA Toolkit的版

weixin_33980459的博客 268

GCC详解的-Wl选项说明

在GCC编译程序时,由于GCC命令不经能够编译,也能够链接程序,GCC链接程序是通过ld命令实现的,如何将GCC的命令行参数传递给ld命令呢,这就是通过-Wl,来实现的。 格式如下: gcc -Wl,param1,param2,param3,... 在调用ld命令时,会等效于如下: ld param1param2param3 注意:-Wl, 后的逗号(,)必不可少,如果要传递多个参数,参数间用,分隔 -Wl,-Bstatic 指定后续ld在处理 -l 参数来链接库文件的链接方式首...

白袍小将的博客 8941

STM32从Keil迁移到GCC:启动文件报错与链接脚本配置实战

在嵌入式开发中,GCC工具链凭借开源免费和跨平台特性,成为STM32项目迁移的热门选择。其核心原理在于编译器差异:Keil使用ARMCC汇编语法,而GCC采用GNU AS语法,导致启动文件如startup_stm32f10x_hd.S出现语法错误、宏定义不兼容等问题。技术价值在于实现零成本、跨平台开发和CI/CD自动化编译。应用场景包括团队协作、Linux服务器构建和OTA升级。自然收敛到本文主题:通过替换GCC版本启动文件、配置链接脚本和Makefile,解决迁移中的报错与调试问题。

weixin_33831196的博客 324

gcc编译选项-Wl

这个参数会指示链接器生成一个包含内存映射信息的文件,该文件可以提供关于程序的各个段(如代码段、数据段等)在内存中的布局信息,以及链接的对象文件和库的详细信息。这对于分析程序的内存使用情况、调试链接问题等非常有帮助。放在命令行中,可能不会被正确地传递给链接器,具体效果取决于编译器的实现和版本。是你想要生成的 MAP 文件的名称,可以根据实际情况进行修改。可以明确地将参数传递给链接器,确保参数被正确处理。,但通常情况下推荐使用。这是一个 shell 重定向操作。在使用 GCC 编译时,

我的博客 1075

gcc编译参数-Wl和rpath的理解

注:我自己的一般方法是在可执行文件位于构建树中,并依赖于构建树中的其他库时,将其与–rpath选项链接,以便于调试,但在安装(make install,building packages)时,需要在不使用–rpath选项的情况下重新链接,并将查找共享库的任务留给目标平台的适当。,例如你显示指定的需要 FOO.so,但是 FOO.so 本身是需要 BAR.so 的,后者你并没有指定,而是 FOO.so 引用到它,这个时候,会先从 -rpath-link 给的路径里找。指定了运行时的so搜索路径。

yygr的博客 3212

【Linux】GCC编译选项-Wl 和 链接(ld)选项-rpath

wl 的 “l”不是数字“1”而是小写的“L”。作用:-Wl 是 GCC 的编译选项,用于将逗号分隔的参数列表传递给底层的。类似的还有-Wa -Wp。

郭老二 757

gcc使用-Wl,-rpath解决so库版本冲突

ref:https://www.dyxmq.cn/linux/gcc-option-wl-rpath.html 一、 问题描述 最近工作中遇到了一个问题:项目需要合入其他部门的模块,但是其中的一个共用共享库被更新了。因为项目很大,如果直接在我们的环境中替换更新这个库,很有可能会影响到其他模块。祖传的代码流传了差不多20年,涉及的模块也十分之多,贸然升级的风险很难评估。但是不替换这个库第三方模块...

hjwang1的专栏 2301

详解TCP/IP五层模型

TCP/IP模型是一个网络通信体系结构,由五层组成,每一层都有其特定的功能。应用层传输层网络层数据链路层物理层每一层都有不同的责任,通过这种层次结构,网络通信可以更有效地进行。

2201_75437633的博客 1万+

告别手动画图!用Cadence SKILL写一个参数化电感PCell(附完整代码)

本文详细介绍了如何使用Cadence SKILL语言开发参数化电感PCell,实现电感版图的自动化生成。通过动态调整线宽、圈数等几何参数,自动创建端口并进行工艺规则校验,大幅提升高频电路设计效率。附完整代码示例,帮助工程师快速掌握PCell开发技巧。

weixin_30684743的博客 369

编译参数-Wl和rpath的理解

-Wl参数的理解 gcc的-Wl,xxx选项将逗号分隔的标记列表作为空格分隔的参数列表传递给链接器,即: gcc -Wl,aaa,bbb,ccc 最终变成了linker的用法: ld aaa bbb ccc 如果是想把ld -rpath通过-Wl传递给gcc,可以是-Wl,-rpath,xxx,也可以指定-Wl的重复实例: gcc -Wl,aaa -Wl,bbb -Wl,ccc 类似的参数 -Wa,<options> Pass comma-separated <options

技术笔记 8231

图像质量评估(5) -- 畸变(Distortion)

当图像中原本应该是直线的地方看起来发生了不自然的变形或扭曲时,我们称为图像畸变。有三种类型的镜头畸变:桶形畸变(后文使用英文barrel),枕形畸变(后文使用pincushion)和胡子畸变(后文使用英文wavef或mustache,这种畸变里包含了桶形畸变和枕形畸变)。有一个重要的点需要注意,根据透镜的类型以及透镜是否能够从相机中移除等条件不同,畸变会有不同的表现。 总的来说,旋转对称光学系统功能上会产生和物体几何相似的图形。但也有少数特殊的系统是例外,例如鱼眼镜头,这种镜头几何是故意设计为

vivo01的专栏 2万+

编译与调试完全指南—第2章 GCC编译选项详解

本文详细介绍了GCC编译器的各类编译选项及其应用场景。主要内容包括: 基础编译选项:宏定义(-D)、输出控制(-o、-v)和编译阶段控制(-E、-S、-c) 文件查找选项: 头文件查找(-I、-isystem、-idirafter)及其搜索顺序 库文件查找(-L、-Wl,-rpath-link、-Wl,-rpath)的区别与用法 特殊变量$$ORIGIN的使用 交叉编译路径配置(--sysroot、-B) 实际应用建议: 字符串宏定义时需注意引号转义 区分-I和-isystem的使用场景 灵活使用Makef

weixin_43149888的博客 153

别再折腾Windows了!Ubuntu 22.04下USRP X310 + RFNoC + Vivado 2021.1开发环境保姆级搭建指南

本文提供Ubuntu 22.04下USRP X310 + RFNoC + Vivado 2021.1开发环境的详细搭建指南,涵盖系统优化、UHD驱动编译、Vivado配置及硬件验证等关键步骤,帮助射频工程师高效构建稳定的开发环境,显著提升FPGA开发效率。

weixin_29168675的博客 256

详解岭回归与L2正则化

最小二乘法存在不可逆和病态问题,导致解析解不可计算或不稳定,岭回归是一种有效的解决方法,以损失无偏性来换取稳定解, 本文介绍详细介绍了岭回归的基本原理,并从L2正则化角度来进行了解释。

Luoyingfeng的博客 1万+

使用gcc参数-Wl,–gc-sections,不链接未用函数,减小可执行文件大小

gcc -ffunction-sections -fdata-sections -Wl,–gc-sections

学习记录 2万+

FineBI学习总结

交叉表:一组作为行标题显示在表的左部,另一组作为列标题显示在表的顶部。连接到数据,如果数据不满足数据分析的需求,先进行自助数据集处理。数据集分类:DB表、SQL、Excel、自助数据集。分组表:将报表中的数据按相同项合并为一组显示。1、数据准备2、制作仪表板3、分享仪表板。左合并:保留左边全部数据,合并右边。右合并:保留右边全部数据,合并左边。上下拼接:上下拼接到一张表数据。3、如何实现拼表:多表拼一张。分组–业务包–数据集–字段。字段分类:数值、文本和日期。目录–仪表板–数据准备。维度:文本和日期类型。

Rsun2018的博客 1561

gcc参数-Wl,–gc-sections,不链接未用函数,减小可执行文件大小

背景 在开发一个项目时,使用了非常多的第三方.a静态库文件,导致编译出的可执行文件非常大。这样一是占用ROM空间,二是会导致程序启动加载速度变慢(项目对启动时间非常敏感)。其实,这些静态库中的函数,并非所有都有调用,项目只使用了其中小部分。这种情况下,gcc的“-Wl,–gc-sections”参数,就非常有用。 参数说明 英文原版的-Wl,–gc-sections解释说明如下: 6.3...

whatday的专栏 2373

windows server 2012 AD 活动目录部署系列(十一)安装证书服务器(ADCS)

本篇博文介绍如何在AD域控上安装证书服务器,本实验域环境:yun.com。 步骤如下: 1、打开“服务器管理器”,点击“添加角色和功能”,如下图: 2、点击下一步, 3、点击下一步, 4、点击下一步, 5、点击“Active Directory证书服务”,弹出功能选择,点击"添加功能",如下图,

白昼的技术专栏 2万+

2ED2410-EM的使用

2ED2410-EM的使用

让你爱上电路设计 976

wl_arm交叉编译工具链搭建:项目应用操作指南

详解wl_arm交叉编译工具链的部署与配置流程,聚焦实际项目中的应用操作,帮助开发者快速构建稳定高效的wl_arm编译环境,提升嵌入式开发效率。

weixin_42350014的博客 1123

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

gcc -Wl,--wrap,malloc 替换系统函数

GNU链接器就提供了一个好用的方法: –wrap=symbol 函数名为“__wrap_symbol”,且称其为包装函数,“symbol”是一个函数名,大致执行过程是这样的:当调用“symbol”函数时,如果“symbol”函数未定义的话就会调用“__wrap_symbol”函数;“__real_symbol”也是个相关的函数,当其只声明不定义的话,我们对其的调用将调用真正的“symbol”函...

weixin_41041321的博客 7532

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

CentOS下GCC多版本共存:GCC Toolset与devtoolset完全指南

在服务器运维和C++项目开发中,GCC作为核心编译工具链,其版本往往左右着系统稳定性与项目兼容性。CentOS自带的系统编译器因追求稳健而版本偏旧,但新项目对C++17/20特性、CUDA工具链及ABI兼容性的硬性要求,催生了多版本GCC共存的真实需求。GCC Toolset(CentOS 7时代为devtoolset)通过软件集合机制,将新版本编译器安装在独立目录,借助PATH、LD_LIBRARY_PATH等环境变量实现“不覆盖、只增强”的安全切换,既能满足项目对编译器的版本诉求,又不破坏系统自有工具链

weixin_33895516的博客 372

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

JNI 与 GCC 的 UnsatisfiedLinkError 问题解決了

这几天因工作需要, 第一次测试 JNI 程序的撰写.依范例写的程序, 看来没什么问题, gcc compile/link 也没报错.可是一跑 Java 程序, 就一直报错:Exception in thread "main" java.lang.UnsatisfiedLinkError: myPac/MyClass.myfunc(I)V在 Google 上找到第1篇文章:Java Native I...

JavaEE架构与开发 158
上一篇: Linux字符设备驱动开发(一)
下一篇: Linux字符设备驱动开发(二)
Yimning
博客等级 码龄8年 1万+粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值