在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: [.]

GCC详解的-Wl选项说明与测试相关推荐

  1. GCC详解的-Wl选项说明

    在GCC编译程序时,由于GCC命令不经能够编译,也能够链接程序,GCC链接程序是通过ld命令实现的,如何将GCC的命令行参数传递给ld命令呢,这就是通过-Wl,来实现的. 格式如下: gcc -Wl, ...

  2. Gcc详解以及静态库、动态库生成

    [转] Gcc详解以及静态库.动态库生成 http://www.360doc.com/content/10/0619/14/1795182_33985297.shtml 1.gcc包含的c/c++编译 ...

  3. 11. shell当中read详解,read语法选项,read用法示例,脚本示例,while read line详解,掌握原则

    shell当中read详解,read语法选项,read用法示例,脚本示例,while read line详解,掌握原则 文章目录 1.1 read详解 1.2 用法示例 1.3 while read ...

  4. 详解C调用lua脚本效率测试

    详解C调用lua脚本效率测试 C调用lua脚本效率测试是本文要介绍的内容,以下代码以C语言为基准,测试了C调用Lua循环和循环调用Lua的效率.结论是不要频繁地穿越C/Lua边界. #include  ...

  5. java 日志 异步_log4j 详解异步日志的配置和测试

    log4j 详解异步日志的配置和测试 日志可以帮助我们分析故障原因,做些数据挖掘的工作.最简单的日志方法,就是自己写个写文件的方法,在需要打日志的时候调用下,但是这显然不可能在实际工程上用.还有个问题 ...

  6. 测试安装详解_Linux的/opt目录(测试实用篇)

    在linux环境测试时,会部署到/opt目录下,这是为何呢? 下面来详解Linux的/opt目录: -------------------------------------------------- ...

  7. GCC详解-gcc之-Wl选项

    1.介绍 -Wl后面的东西是作为参数传递给链接器ld的.比如: gcc -Wl,aaa,bbb,ccc 最后会被解释为: ld aaa bbb ccc 2.-Wl,-Map=xxx.txt 生成map ...

  8. android菜单详解二:选项菜单

    创建一个选项菜单 选项菜单里应该包含基本的activity动作和必须的导航条目 (例如,一个打开程序设置的菜单项). 选项菜单的菜单项有两种不同的选择方法,一是菜单项按钮,二是通过 Action Ba ...

  9. TCP-IP详解:SACK选项(wireshark抓包有SLE和SRE的SACK包)

    目录 1. 前言 2. 名词解释 3. TCP SACK选项 3.1 SACK option格式 3.2 SACK(RFC2018) 3.3 D-SACK(RFC2883) 3.4 举例说明 4. w ...

最新文章

  1. (转)Spring定时任务的几种实现
  2. 【翻译】Ext JS最新技巧——2015-8-11
  3. webstorm激活+汉化教程
  4. [渝粤题库]陕西师范大学《幼儿园语言教育》作业
  5. EaglePHP开源框架全新改版(v1.8)
  6. SpringMVC、SpringBoot拦截器的实现和原理
  7. java excel图表_Java 创建Excel图表
  8. 苹果11触屏不灵敏_苹果iPhone11Pro屏幕失灵怎么办
  9. 安装python3.8出现ModuleNotFoundError: No module named ‘_ctypes’解决办法
  10. word左边左对齐,右边右对齐
  11. 古月居 ROS 入门21讲--PA17 ROS中坐标系管理系统笔记
  12. 微众银行为甘肃省职业院校技能大赛“区块链技术与应用”赛项提供技术支持
  13. C. Get an Even String
  14. PreScan快速入门到精通第三十四讲基于PreScan进行超声波雷达传感器仿真
  15. Spring-day01
  16. 从滚动条到画布的几个代码文件——Python学习笔记之十七
  17. 【大题整理】操作系统
  18. java redis 过期_Redis中的键值过期操作
  19. 彻底删除paragon ntfs for mac
  20. Qt实现小型的超市收银系统

热门文章

  1. 【C#】加加和减减、复合赋值运算符、一元二元运算符、关系运算符、bool类型
  2. 为改善Siri功能Apple收购语音助理初创公司
  3. Java知识点全面汇总
  4. 氯代吡啶联吡啶废水处理
  5. [转]身体各部位暴瘦的方法
  6. 什么是云计算?3分钟带你走进云计算世界
  7. ibm服务器做系统按f几,这是我的主板,请问开机启动热键按F几?
  8. 菌群数据预处理-microbiome包
  9. 高效的java异常(Effective Java Exceptions)
  10. 配置gpgpu-sim——基于ubuntu12.04LTS