专栏中心

EEPW首页 > 专栏 > gcc -fPIC编译选项分析

gcc -fPIC编译选项分析

发布人:电子禅石 时间:2020-02-20 来源:工程师 发布文章

1、-fPIC 作用于编译阶段,在编译动态库时(.so文件)告诉编译器产生与位置无关代码(Position-Independent Code),若未指定-fPIC选项编译.so文件,则在加载动态库时需进行重定向。

2、64位编译器下编译生成动态库时,出现以下错误:

/usr/lib64/gcc/x86_64-suse-linux/4.3/../../../../x86_64-suse-linux/bin/ld: ../../CI/script/server/lib/libz.a(adler32.o): relocation R_X86_64_32 against `.text' can not be used when making a shared object; recompile with -fPIC

../../CI/script/server/lib/libz.a: could not read symbols: Bad value

原因:提示说需要-fPIC编译,然后在链接动态库的地方加上-fPIC的参数编译结果还是报错,需要把共享库所用到的所有静态库都采用-fPIC编译一遍,才可以成功的在64位环境下编译出动态库。

3、为何在32位的编译器下编译,就不会报错呢?

对于我们的32位环境来说, 编译时是否加上-fPIC, 都不会对链接产生影响, 只是一份代码的在内存中有几个副本的问题(而且对于静态库而言结果都是一样的).但在64位的环境下装载时重定位的方式存在一个问题就是在我们的64位环 境下用来进行位置偏移定位的cpu指令只支持32位的偏移, 但实际中位置的偏移是完全可能超过64位的,所以在这种情况下编译器要求用户必须采用fPIC的方式进行编译的程序才可以在共享库中使用。
————————————————

原文链接:https://blog.csdn.net/fz_qianzi/article/details/51912723

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词: gcc

相关推荐

ICC GCC傻傻分不清?聊一聊编译器那些事儿

嵌入式系统 2017-05-17

AVR 单片机GCC 程序设计

剖析C语言中a=a+++++a的无聊问题

国嵌应用班-1-1(GCC程序编译)

视频 2013-11-04

在AVR Studio里使用AVR-GCC

GCC-维基百科

嵌入式系统 2010-05-13

交叉编译链arm-linux-gcc-3.3.2在ubuntu10.04下的安装

基于ARM11嵌入式远程监控系统的分析与设计

Makefile的编写指导

GCC 中文手册

资源下载 2007-02-09

基于Atmega16L的简单音乐制作

用arm-linux-gcc.4.3.2交叉编译器编译linux-3.0.1内核

winavr gcc快速入门

嵌入式系统 2011-11-08

Linux上安装GCC3.4.0编译器过程

嵌入式系统 2010-05-14

AVR 单片机与GCC 编程V1.1版

AVRGCC/WinAVR编译环境中断函数的使用方法

更多 培训课堂
更多 焦点
更多 视频

技术专区