PIC 共享库中不同的函数地址
different function address in PIC shared library
我有一个文件 ptr.c 作为
a@po:~/code/link_load$ cat ptr.c
int test()
{
printf("in test1 %p\n",&test);
return 0;
}
我创建了一个共享库作为
a@po:~/code/link_load$ gcc -fPIC -c ptr.c
a@po:~/code/link_load$ gcc -shared -o libptr.so ptr.o
然后我从两个程序 p1.c 和 p2.c 调用测试,调用测试和 p1.c 都在调用测试后休眠以确保两个可执行文件一起激活。
由于文本部分是共享的,所以我希望测试函数的地址相同。
但不是,为什么?
编辑:我猜打印的地址是虚拟地址。
如果那是真的那么它映射到实际地址,这对于 p1 和 p2 都是相同的。
单个文件(例如,您的库的文本部分)可以映射到多个进程中的不同虚拟地址,同时仍然被共享。这就是这里发生的事情。
我有一个文件 ptr.c 作为
a@po:~/code/link_load$ cat ptr.c
int test()
{
printf("in test1 %p\n",&test);
return 0;
}
我创建了一个共享库作为
a@po:~/code/link_load$ gcc -fPIC -c ptr.c
a@po:~/code/link_load$ gcc -shared -o libptr.so ptr.o
然后我从两个程序 p1.c 和 p2.c 调用测试,调用测试和 p1.c 都在调用测试后休眠以确保两个可执行文件一起激活。
由于文本部分是共享的,所以我希望测试函数的地址相同。
但不是,为什么?
编辑:我猜打印的地址是虚拟地址。 如果那是真的那么它映射到实际地址,这对于 p1 和 p2 都是相同的。
单个文件(例如,您的库的文本部分)可以映射到多个进程中的不同虚拟地址,同时仍然被共享。这就是这里发生的事情。