`
isiqi
  • 浏览: 16053849 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

static的静态全局变量和静态全局函数与fPIC

 
阅读更多

static修饰的静态全局变量和函数的作用范围只是本模块,其他模块不存在对这些符号的引用。

static修饰的函数也不担心与其他模块存在重名问题。

因此,如果一个变量是static的静态全局变量或者静态局部变量,那么可以使用相对地址寻址,而不需要使用got表。同样一个static修饰的内部函数也是如此,汇编代码中不需要使用got表。这样能够加快函数的访问速度。

全局变量由于不能确定不被其他模块使用,所以必须使用GOT表。

另外,即使确认该模块的全局变量不会被其它模块使用,这个全局变量也不能使用类似模块内的变量的相对地址寻址完成,因为不能保证不发生全局符号介入问题,导致必须进行重定位,因为其被其他模块的同名符号覆盖了,必须重定位到其他模块的这个符号。

在模块内部使用static修饰全局符号和变量即可以减少麻烦还可以加快程序速度,只要保证这些变量和函数不被其他模块使用就可以。

分享到:
评论

相关推荐

    libevent-2.0.22 windows和linux下的静态库,附源码和libevent使用手册

    libevent-2.0.22-stable.tar.gz源码编译的Windows和Linux下的静态库,另附源码,电子书《libevent参考手册(中文版).pdf》、《libevent源码深度剖析.pdf》、《LibeventBook.pdf》。 Linux环境下该libevent静态库修改...

    boost_linux_fPIC.rar

    boost的linux静态库版本,添加了-fPIC选项,一般的boost静态库没有此选项,动态库在调用的时候会报下面的内容,用了这个库就不会出了(网上教的编译方法都是针对1.55版本的,后面的版本代码都不一样): /usr/bin/...

    GCC静态库和共享库的生成及调用

    GCC静态库和共享库的生成及调用 GCC静态库和共享库的生成及调用

    Linux C语言动态库及静态库的制作步骤讲解

     gcc -c -fPIC add.c sub.c div.c mul.c //-c表示生成.o目标文件,-f后加一些编译选项,PIC表示与位置无关  gcc -shared -o libmymath.so add.o sub.o mul.o div.o//创建共享库mymath,添加add.o,sub.o,...

    动态库调用静态库示例讲解

    而静态库所需的目标文件可以不用-fPIC选项. 例: 代码如下://///// static.h void static_print(); ///////static.cpp #include #include “static.h” void static_print() {  std::cout<<“This is static_...

    boost库文件(.a).zip

    使用boost静态库提示静态库没有添加-fPIC

    test-fpic.rar_The Test

    This test is used to check that -fpic is a default compiler option for the arm-linux-androideabi toolchain.

    老生常谈C语言动态函数库的制作和使用(推荐)

    函数的编译:使用gcc –c add.c -fPIC只编译不链接函数.c文件,分别生成函数的目标文件(例如add.o、sub.o、mul.o和div.o)。 函数的归档入库:使用gcc -o libdynamic.so $(objects) -share将目标文件归档入库。 ...

    浅谈Linux C语言动态库及静态库

    gcc -c -fPIC add.c sub.c div.c mul.c //-c表示生成.o目标文件,-f后加一些编译选项,PIC表示与位置无关 gcc -shared -o libmymath.so add.o sub.o mul.o div.o//创建共享库mymath,添加add.o,sub.o,mul.o,div.o目标...

    串口通信例程

    很好的例程,大家可以试试看

    gcc编译动态库

    gcc生成动态库。...其中-fPIC选项的作用是:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的, 所以动态载入时是通过代码拷贝的方式来满足不同的调用,而不能达到真正的代码段共享的目的.

    libevent-2.1.8 ubuntu x64 lib

    environment: Linux mem2nd-System-Product-Name 4.15.0-47-generic #50~16.04.1-Ubuntu SMP Fri Mar 15 16:06:21 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux; gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~...

    给mysql增加自定义函数(UDF),基于雪花算法生成分布式ID

    压缩包里提供了dll和so分别用户windows和linux。只需把dll或则so放到mysql安装目录下的lib/plugin目录下,然后登录mysql执行如下命令: DROP FUNCTION IF EXISTS `SNOWFLAKE`; CREATE FUNCTION `SNOWFLAKE` RETURNS ...

    libboost_python

    带-fPIC编译出来的libboost_python.a静态库,boost自带工具无法编译出这样的库。这个库可以解决如下编译错误问题! /usr/bin/ld: libboost_python.a(from_python.o): relocation R_X86_64_32 against `.rodata.str...

    gcc 中文帮助文档

    -fPIC 编译选项 -static 编译选项 AT&T的汇编格式 x86内联汇编 简述 内联汇编 程序模板 操作数 修饰寄存器列表 操作数约束 示例 寄存器约束 匹配约束 内存操作数约束 修饰寄存器 不同的CPU下最佳编译...

    Python实现的调用C语言函数功能简单实例

    本文实例讲述了Python实现的调用C语言函数功能。分享给大家供大家参考,具体如下: 实例参考python cookbook 中的15.1节中的例子P612页 先把 c文件编译成 so文件 gcc a.c -fpic -shared -o lib.so 通过上面编译...

    linux下configure命令详细介绍

    Linux环境下的软件安装,并不是一件容易的事情;如果通过源代码编译后在安装,当然事情就更为复杂一些;现在安装各种软件的教程都非常普遍;但万变不离其中,对基础知识的扎实掌握,安装各种软件的问题就迎刃而解了。...

    操作系统(内存管理)

    这三个变量都是全局变量: 清单 1. 我们的简单分配程序的全局变量 int has_initialized = 0; void *managed_memory_start; void *last_valid_address; 如前所述,被映射的内存的边界(最后一个有效地址)常...

    内存管理内存管理内存管理

    这三个变量都是全局变量: 清单 1. 我们的简单分配程序的全局变量 int has_initialized = 0; void *managed_memory_start; void *last_valid_address; 如前所述,被映射的内存的边界(最后一个有效地址)常...

    linux jnative 调用.so方法及附属全部库和源码

    终端执行命令:$ gcc test_a.c test_b.c test_c.c -fPIC -shared -o libtest.so 将编译得到到libtest.so拷贝到/usr/lib/,同时执行chmod 555 libtest.so 2.qt测试库libmylib.so 环境:ubuntu10.4下 语言:c ...

Global site tag (gtag.js) - Google Analytics