问题描述

前段时间项目开发中,实现了一个动态库,封装了一些方法。然后基于这个动态库,实现了一个应用程序。应用程序中含有全局变量A,动态库中也含有全局变量A,当我调用动态库中函数后,发现应用程序的A发生了变化!!!O,My God!对于我这种还没在Linux下做过开发的人来说,一头雾水。。。。。。 于是我尝试着,将A中的变量名称改为B,这样问题也就没有了~~~

原因

应用程序进行链接的时候,动态库中全局变量定义,将会被应用程序中同名的全局变量所覆盖。这样也就造成了,在动态库中修改A变量时,应用程序中的A也发生了变化。

解决方法

在创建动态链接库时,gcc/g++选项中添加编译选项

-Wl,-Bsymbolic.

其中Wl表示将紧跟其后的参数,传递给连接器ld。Bsymbolic表示强制采用本地的全局变量定义,这样就不会出现动态链接库的全局变量定义被应用程序/动态链接库中的同名定义给覆盖了

-Bsymbolic:优先使用本地符号相关推荐

  1. Hook安卓项目内的字符串获取,用服务器的key value优先代替本地的key value

    前言 前段时间接到一个需求,要动态的增加多语言语种,且可以动态更新用户app上的不规范语言(比如一个英语过长导致按钮内显示不全) 服务端的逻辑和前端动态获取的逻辑就不说了 修改app内的语言参考这篇安 ...

  2. windbg 符号表

    1. 系统变量 _NT_SYMBOL_PATH =   C:\MyCodesSymbols; SRV*C:\MyLocalSymbols*http://msdl.microsoft.com/downl ...

  3. CMake 安卓NDK编译常用语法

    目录 CMake 安卓NDK编译常用语法 CMake版本 设置项目名称 平台 32&64 路径相关配置 设置生成动态库文件 常用的编译和链接选项 编译选项 `CMAKE_CCXX_FLAGS_ ...

  4. 解决Linux多个动态库间的符号冲突问题

    c和c++开发人员或多或少都使用过Linux动态库,但是很多时候我们都不会去深入了解其中的一些细节和原理,直到自己的程序出现莫名其妙的问题后才会去着手解决,我也是在遇到一些动态库的问题后才去深入寻找解 ...

  5. 配置BGP本地优先级

    一.拓扑图: 二.配置基本的BGP.以R1为例: R1(config)#router bgp 64512 R1(config-router)#net 172.16.1.0 mask 255.255.2 ...

  6. 本地maven仓库_Maven(四):仓库

    Maven 的工作需要从仓库下载一些 jar 包,如下图所示,本地的项目 A.项目 B 等都会通过 maven 软件从远程仓库(可以理解为互联网上的仓库)下载 jar 包并存在本地仓库,本地仓库 就是 ...

  7. 远程过程调用失败_Dubbo 本地调用

    本地调用介绍 当一个应用既是一个服务的提供者,同时也是这个服务的消费者的时候,可以直接对本机提供的服务发起本地调用.从 2.2.0 版本开始,Dubbo 默认在本地以 injvm 的方式暴露服务,这样 ...

  8. 设置 Nuget 本地源、在线私有源、自动构建打包

    设置 Nuget 本地源.在线私有源.自动构建打包 本文演示如果在项目中生成 Nuget 包,并添加 Nuget 本地源,不用发布到 Nuget 服务器.再附带使用在线私有源的简单方法,以及提交代码自 ...

  9. Gradle 设置 本地maven仓库及发布mavenLocal()路径的方法

    2019独角兽企业重金招聘Python工程师标准>>> 最近在学习Gradle,在配置maven仓库时遇到一个很奇怪的问题.因为之前已经在自己机器上下载了一些maven的本地缓存,所 ...

最新文章

  1. .NET : 再谈谈XML中的命名空间问题
  2. C宏定义中## 和# 的含义
  3. kafka教程视频百度网盘下载,聊一聊-MySQL-数据库中的那些锁
  4. Ajax实现--jQuery
  5. OpenCV Python教程(3)(4)(5): 直方图的计算与显示 形态学处理 初级滤波内
  6. UBOOT 2011-3版本分析(初步感受)
  7. c语言中转义字符是由什么和什么构成,c语言中什么是转义字符
  8. C#中结构体定义并转换字节数组
  9. python docker自动化_「docker实战篇」python的docker爬虫技术-移动自动化控制工具appium工具(17)...
  10. 15 —— npm —— package.json 与 package-lock.json 的作用
  11. 2019暑假绍兴第一中学游记
  12. 信息安全问题频发:四成人讨厌大数据 六成人称微信谣言最多
  13. AD 09 PCB生成GERBER生产文件全过程
  14. Java进行音视频转码
  15. 端口扫描实验和Dos攻击实验
  16. 101个著名的管理学及心理学效应
  17. java中实现注册时Email邮件激活验证
  18. EasyUI filebox 限制文件上传的类型
  19. 微信小程序+Node服务器
  20. 水晶报表打印出错,未能加载文件或程序集“CrystalDecisions.CrystalReports.Engine, Version=10.5.3700.0

热门文章

  1. 09.span query 查询
  2. 洛谷——P1056 排座椅
  3. 【详细解读】进程管理 -死锁问题 系统有三个进程:A B C 这3个进程都需要5个系统资源。如果系统至少有多少个资源,则不可能发生死锁
  4. python入门经典书籍知乎_知乎问题回答 - 《Python100天从新手到大师》 - 开源书籍(oscbook.com)...
  5. hadoop 实战练习_Hadoop 实战实例
  6. python工具打造之实现端口扫描
  7. aso优化师是什么_2019最新ASO优化常见问题精选(下)
  8. mysql delete 会锁表吗_MySQL高压缩引擎TokuDB 揭秘
  9. sql 合并行内容_SAS高级编程公开课之一SQL
  10. 华硕vm510l拆电池图解_图解说设备:凯斯CX80C你会买吗?