【发布时间】:2010-08-19 15:09:14
【问题描述】:
我有一个使用动态加载库的大型应用程序。在程序结束时终止它时会出现段错误或吐出一条消息“glibc 检测到损坏的双链表”。查看 valgrind 输出,我认为情况就是这样: 假设我们有三个文件:
utilities.c - compiled with -fPIC and used ar and ranlib to create utilities.a.
dynamicallyloaded.c- compiled with -fPIC and -shared and linked with utlities.a to generate dynamicallyloaded.so
main.c - compiled with -fPIC and linked with utilities.a to create main. main dynamically loads and uses dynamicallyloaded.so .
utilities.h - delclared a class IfTrackerFile with AubFileName as a static string member like static string AubFileName;
utilities.cpp - defines the static variable: string IfTrackerFile::AubFileName;
valgrind out 表示该行存在无效的 free/delete/delete : 字符串 IfTrackerFile::AubFileName;
我不知道发生了什么。 非常感谢这方面的任何帮助/指导。
【问题讨论】:
-
使用静态库并非易事。将所有内容编译为共享库并让编译器对其进行排序。
标签: c++ gcc shared-libraries heap-memory heap-corruption