目前我测试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)
供应商真的提供了损坏的共享库吗?!