代码量很大不方便贴,那肯定也不方便排查。 写一个简单的小测试,先证实下是不是链接顺序问题。
应该不存在你所说的问题,可能是你的static全局指针变量没有初始化,最好贴上代码。 [quote=引用 楼主 QQ575787460 的回复:] 问题是这样的。 有两个cpp,假设为A.CPP和B.CPP,这两个cpp里面都定义了一个static全局指针, makefile中 链接A.o和B.o的时候,如果A.o放在B.o前面,那么B.o里面的static全局指针变量不可用,是个野指针。 如果链接时,B.o放在A.o前面,就不会有问题。 想不明白,我知道可以通过函数返回static local变量替代全局变量,这肯定不会出问题。 但是我更想知道为什么链接顺序不一致,会出问题呢?
问题是这样的。 有两个cpp,假设为A.CPP和B.CPP,这两个cpp里面都定义了一个static全局指针, makefile中 链接A.o和B.o的时候,如果A.o放在B.o前面,那么B.o里面的static全局指针变量不可用,是个野指针。 如果链接时,B.o放在A.o前面,就不会有问题。 想不明白,我知道可以通过函数返回static local变量替代全局变量,这肯定不会出问题。 但是我更想知道为什么链接顺序不一致,会出问题呢?
[quote=引用 6 楼 QQ575787460 的回复:] [quote=引用 4 楼 mujiok2003 的回复:] 具体出了什么问题?
[quote=引用 4 楼 mujiok2003 的回复:] 具体出了什么问题?
链接顺序出问题只是表象,本质上肯定不是这里的问题,因为static变量并不会导出符号,对于链接器来讲是不可见的,绝对不会影响到。所以你应该查查其它方面的问题,比如未初始化,指针数组访问越界或者堆栈溢出等等。 [quote=引用 3 楼 QQ575787460 的回复:] [quote=引用 1 楼 turingo 的回复:] 应该不存在你所说的问题,可能是你的static全局指针变量没有初始化,最好贴上代码。 [quote=引用 楼主 QQ575787460 的回复:] 问题是这样的。 有两个cpp,假设为A.CPP和B.CPP,这两个cpp里面都定义了一个static全局指针, makefile中 链接A.o和B.o的时候,如果A.o放在B.o前面,那么B.o里面的static全局指针变量不可用,是个野指针。 如果链接时,B.o放在A.o前面,就不会有问题。 想不明白,我知道可以通过函数返回static local变量替代全局变量,这肯定不会出问题。 但是我更想知道为什么链接顺序不一致,会出问题呢?
具体出了什么问题?
[quote=引用 1 楼 turingo 的回复:] 应该不存在你所说的问题,可能是你的static全局指针变量没有初始化,最好贴上代码。 [quote=引用 楼主 QQ575787460 的回复:] 问题是这样的。 有两个cpp,假设为A.CPP和B.CPP,这两个cpp里面都定义了一个static全局指针, makefile中 链接A.o和B.o的时候,如果A.o放在B.o前面,那么B.o里面的static全局指针变量不可用,是个野指针。 如果链接时,B.o放在A.o前面,就不会有问题。 想不明白,我知道可以通过函数返回static local变量替代全局变量,这肯定不会出问题。 但是我更想知道为什么链接顺序不一致,会出问题呢?
64,643
社区成员
250,475
社区内容
加载中
试试用AI创作助手写篇文章吧