-Bsymbolic: 优先使用本地符号

简介: 问题描述前段时间项目开发中,实现了一个动态库,封装了一些方法。然后基于这个动态库,实现了一个应用程序。应用程序中含有全局变量A,动态库中也含有全局变量A,当我调用动态库中函数后,发现应用程序的A发生了变化!!!O,My God!对于我这种还没在Linux下做过开发的人来说,一头雾水。

问题描述

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

原因

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

解决方法

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

-Wl,-Bsymbolic.

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

目录
相关文章
|
6月前
|
Java
JAVA工具类匹配重复或者连续的字符和符号
JAVA工具类匹配重复或者连续的字符和符号
|
7月前
|
算法 Java
Java【算法分享 03】实用算法分享(拼写inStr、去掉字符串后边特定值、三者最小、计算表达式的值)不断增加中ing
Java【算法分享 03】实用算法分享(拼写inStr、去掉字符串后边特定值、三者最小、计算表达式的值)不断增加中ing
45 0
小符号 大影响
C语言学习bug记录第一弹
|
编译器 C++
c++中基本类型详细解释外加基本运算规则
类型 含义 wchat_t 宽字符 bool 布尔类型 char 字符 chat16_t unicode字符 chat_32 unicode字符 short 短整型 int 整形 long 长整型 longlong 长整型 float 单精度浮点型 double 双精度浮点型 longdouble 扩展精度浮点型
120 1
|
Java Python
进制的底层逻辑规则 左移<< 右移>> 取反加一 补位原则 正负数 相反数等 文章中含验证源码
进制的底层逻辑规则 左移<< 右移>> 取反加一 补位原则 正负数 相反数等 文章中含验证源码
148 0
进制的底层逻辑规则 左移<< 右移>> 取反加一 补位原则 正负数 相反数等 文章中含验证源码
|
Serverless
宏程序变量运算规则
宏程序变量运算规则
|
C语言
符号配对 (20 分)
符号配对 (20 分)
204 0
|
开发者
优先运算符| 学习笔记
快速学习优先运算符。
运算符优先顺序(包含类型说明)
运算符优先顺序(包含类型说明)
178 0
运算符优先顺序(包含类型说明)
|
IDE C# 开发工具
=>符号使用场景
=>符号使用场景
159 0
=>符号使用场景