首页 > 其他分享 >-fPIC选项

-fPIC选项

时间:2023-07-11 15:01:21浏览次数:27  
标签:选项 静态 fPIC 编译 动态 链接

-fPIC选项的生效阶段在编译阶段,使用-fPIC选项编译的.o文件会生成位置无关的代码通常在linux下用gcc编译动态库时都会加上一个-fPIC选项来生成位置无关代码。

如果你的静态库可能会被动态库使用,那么静态库编译的时候就也需要-fPIC选项。

【下面说了啥,我也看不懂了,可以不看】
如果你的静态库可能会被动态库使用,那么静态库编译的时候就也需要-fPIC选项,原因如下:
众所周知,静态库其实是一系列.o文件的打包,将.o文件制作成静态库的过程是不会发生链接的。所以链接静态库就约等于将静态库解包后的.o文件一个一个全部链接。
如果一个动态库需要链接一个静态库,那么就相当于动态库去链接一系列的.o文件,而编译动态库所需的.o文件时一般是推荐使用-fPIC编译选项的。

参考:链接

具体的-fPIC是什么原理可以参考:动态库基本原理和使用方法,-fPIC选项的来龙去脉。-fPIC大概的原理就是:编译时构造全局偏移表(Global Offset Table, GOT),运行时通过GOT中存储的偏移值访问指令和数据。
更详细的解释可以参考:《程序员的自我修养》7.3章

标签:选项,静态,fPIC,编译,动态,链接
From: https://www.cnblogs.com/codingbigdog/p/17544651.html

相关文章

  • R语言 ggplot函数中 annotate选项增加注释
     001、基础绘图ggplot(data=mtcars,aes(x=mpg,y=disp,color=factor(cyl)))+geom_point()##基础绘图 002、annotete在任意位置增加注释ggplot(data=mtcars,aes(x=mpg,y=disp,##在坐标,25,300处增加QQcolor=factor(cyl)))+geom_point......
  • git log --pretty=format 常用选项参数 【汇总】
    --pretty=format常用选项[注]选项说明速记%H提交的完整哈希值commithash%h提交的简写哈希值Abbreviatedcommithash%T树的完整哈希值treehash%t树的简写哈希值Abbreviatedtreehash%P父提交的完整哈希值Parenthashes%p父提交的简写......
  • 【Scala】在IDEA中右键没有添加scala object和class的选项
    首先要确保在AddFrameworkSupprt中添加了scala(选中项目根目录) 然后在File->ProjectStructure...中选择Libraries   最后是关键,要选择SourceRoot文件夹上级目录,一般是xxx.main  在sourceroot文件夹上右击,New里就有了ScalaClass ......
  • vue项目中的package.json的private选项的作用
    {"name":"项目名称","description":"描述","version":"版本","private":true,"author":"testTeam","license":"MIT",}如果你在你的package.j......
  • Win11如何删除多余的打开方式选项
    Win+R--->regedit打开注册表计算机\HKEY_USERS\S-1-5-21-4024916612-1691460616-483768494-1001\Software\Classes\Applications  即可选择需要删除的打开方式 ......
  • gcc/g++ 编译选项详解
    编译步骤gcc与g++区别gcc命令的常用选项编译优化选项-O优化-O1优化-O2-O0-Os-Ofast-Og-Oz-O选项控制特定的优化WarningsReference编译步骤gcc、g++分别是gnu的c&c++编译器。实际上,GCC能够编译三种语言:C、C++和Ob......
  • 前端实现radio+其它自定义输入选项
    后端数据库设计:1.类型字段  2.用户输入的其它信息记录字段 前端:<el-form-itemlabel="性能要求类型">     <el-radio-groupv-model="form.performanceRequirementType">      <el-radio       v-for="dictinperformanceRequire......
  • go-选项卡模式
    packagemainimport"fmt"const(defaultNamestring="张建平"defaultAgeint=27defaultHighint=175)typeUserstruct{NamestringAgeintHighint}typeUserOptionsstruct{Namestring......
  • OSPO才是企业拥抱开源的正确选项——适兕访谈录
    点击链接收听本期“大咖访谈”播客,与大咖面对面:大咖访谈:适兕|OSPO才是企业拥抱开源的正确选项开源雨林:请先简单介绍一下自己大家好,我是李建盛,网络ID适兕(kùosì),是一名作者,从事开源相关将近20年。开源雨林:您接触开源时间很长了,那近几年您特别关注开源治理的原因是什......
  • Qemu中生成针对具体体系结构的纯净代码的方法---利用GCC的-E选项
      实验室正在研究一个叫做Qemu的项目,外国人写的初始代码。里面很多内容是我们不需要的,但是却参杂在我们关注的代码中。突然想到了一个编译命令-E,它能够一下子就把那些不需要的代码过滤掉。以前几次开会大家都抱怨这个东西干扰信息太多,导致代码分析的连贯性总是被打断,进度特别慢......