掉坑里好几天了,一直没爬出来,没办法老大过来指点了一下。
情况是程序中的一个类和动态库中的一个类同名,编译以后程序运行过程中崩溃,出现段错误,而且是在连接服务器过程中崩溃,
所以开始是怀疑服务器代码的问题,gdb跟了很久程序是在连接服务器过程中突然退出到自己的代码,导致后续的错误,刚开始还
抱怨服务器太挫,跟到错误之后还是没有想到重名的问题,反而怀疑自己程序逻辑有问题,越陷越深,顿时迷茫............
经过验证,在linux环境下,如果发生这种同名情况,自己程序中同名的类会覆盖动态库中的,使程序从动态库退出。为避免这种情况:
一是在写代码过程中尽量避免这种同名(很难保证啊),另外一个就是靠编译方法了(稍微靠谱)。
解决方法:将发生重名的那个动态库编译时加上编译选项:-fvisibility=hidden(使用该选项编译出的.o文件中所有符号均为外部不可访问)。
结果简单,过程曲折,归根结底:1.思考不仔细 2.这方面知识不够 3.经验积累不够
总结:慢慢修炼吧,捶胸顿足是没有用的。
阅读(2068) | 评论(0) | 转发(0) |