C++链接器弱名称重复时链接的隐患
2017-08-13 11:40
85 查看
对于多个CPP中存在相同弱名称的情况下,g++链接的时候是不会提示错误的。
另外,如果一个CPP中存在强名称a,另一个CPP中存在弱名称a,则弱名称a在链接时会引用到强名称a的地址。
只有当两个CPP中都存在强名称a都时候,链接才会出错。
针对第二条,这个规则会引发一个比较严重的隐患。
例如
A.cpp
#include "b.cpp"
int a = 10;
int b= 20;
int main()
{
fun();
}
b.cpp
double a;
void fun()
{
a = 0.0;
}
这种情况下,b.cpp中都a引用了a.cpp中int a的地址,因此func中对于double a都操作会影响到a.cpp中int a和int b两个变量的值,还是挺危险的,最主要还不是很容易查到这样的BUG,特别是在大型工程中。
另外,如果一个CPP中存在强名称a,另一个CPP中存在弱名称a,则弱名称a在链接时会引用到强名称a的地址。
只有当两个CPP中都存在强名称a都时候,链接才会出错。
针对第二条,这个规则会引发一个比较严重的隐患。
例如
A.cpp
#include "b.cpp"
int a = 10;
int b= 20;
int main()
{
fun();
}
b.cpp
double a;
void fun()
{
a = 0.0;
}
这种情况下,b.cpp中都a引用了a.cpp中int a的地址,因此func中对于double a都操作会影响到a.cpp中int a和int b两个变量的值,还是挺危险的,最主要还不是很容易查到这样的BUG,特别是在大型工程中。
相关文章推荐
- c++高级---C++声明、定义、类的定义、头文件作用、头文件重复引用,不具名空间以及编译器编译链接过程
- c/c++ 链接、链接器
- Name Mangling in C++(g++生成链接库后函数名称的变化)
- c++生成不重复的随机整数
- C/C++编译常见链接错误
- C++ 避免隐藏继承而来的名称
- [C++]Remove Duplicates from Sorted List 从已排序的链表中移除重复元素
- 配置C++链接数据库(MacOS-Xcode)
- C++ 函数模板特化导致的多重定义链接错误
- 导入项目名称重复
- dedeCMS5.7在任意栏目获取顶级栏目名称及链接的方法
- 分享一个dedecms自定义获取上级栏目名称和链接的标签
- C++强制转换不同声明或类型的函数指针隐患
- C++编译与链接
- c++的.o文件的链接顺序
- c++高级---C++中的头文件和源文件(链接时怎么对应、头文件中能定义什么)
- C# 中动态调用C++动态链接
- C/C++编译和链接过程详解 (重定向表,导出符号表,未解决符号表)
- C#中逐步实现加载自己用 C++ 语言编写的动态链接库
- C/C++面试之算法系列--去除数组中的重复数字