glibc使用共享库检测到双重免费或损坏(!prev)

时间:2014-11-26 00:03:29

标签: c++ linux shared-libraries

目前我测试linux中提供的共享库供应商, 以下是简单的来源:

#include <iostream>
using namespace std;

extern int test1();
extern int test2();

int main()
{
    cout << "hello world" << endl ;
    return 0 ;
    cout << "Test 1" << endl;
    test1();

    cout << "Test 2" << endl;
    test2();

    return 0;
}

我的编译和链接如下:

g ++ -g -Wall -fPIC -D_DEBUG -o test -I./include32 src / xxx.cpp src / yyy.cpp src / test.cpp -L./lib32 -lshare1 -lshared2

运行时我有以下输出:

hello world
***glibc detected *** ./test: double free or corrution (!prev) 0x00000000077ec30 ***

我没有得到的是,因为我只打印“hello world”然后返回0, 这意味着我不会在libshared1.so和libshared2.so中调用任何函数, 为什么像glibc检测到的错误会发生?这是否意味着共享库具有 要加载到内存的问题?因为main函数从不调用test1(),test2() 它真正调用了libshared1.so和libshared2.so !!中的函数。

建议,评论非常感谢!!

编辑:

#include <iostream>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>

using namespace std;

int main()
{

    cout << "hello world 3 " << endl ;
    void *handle2;
    handle2 = dlopen ("/usr/local/lib/xxx.so", RTLD_LAZY);   
    if (!handle2) {
        fprintf (stderr, "%s\n", dlerror());
        exit(1);
    }

    cout << "hello world 1 " << endl ;
    void *handle3;
    handle3 = dlopen ("/usr/local/lib/yyy.so", RTLD_LAZY);
    if (!handle3) {
        fprintf (stderr, "%s\n", dlerror());
        exit(1);
    }


    cout << "hello world" << endl ;
}

编译:

 g++ -g -Wall -rdynamic -o test src/test.cpp -ldl

输出:

 hello world 3
 hello world 1
 Segmentation fault (core dumped)

供应商真的提供了损坏的共享库吗?!

0 个答案:

没有答案