1个回答
2016-10-27
展开全部
-fPIC 作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code),则产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存的任意位置,都可以正确的执行。这正是共享库所要求的,共享库被加载时,在内存的位置不是固定的。
动态链接库的使用 :
第一步,链接器需确认程序所需要的变量和函数名是否包含在程序或者是动态链接库中。
第二部,程序运行的时,系统的动态加载器会检查哪些动态链接库需要连接到程序,从而将这些库文件载入内存。
方法/步骤
ubuntu 14.04 linux c
gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2
file 1: add_func.c
int add_func(int a,int b)
{
return a+b;
}
file 2: sub_func.c
int sub_func(int a ,int b)
{
return (a-b);
}
file 3 : math_test.c
#include <stdio.h>
int main(int argc,char *argv[])
{
int rc,a = 100,b=50;
printf("a = %d ,b = %d \n",a,b);
printf("a - b = %d \n",sub_func(a,b));
printf("a + b = %d \n",add_func(a,b));
return rc;
}
3
编译:
生成动态链接库 :
root@linux:~/code# gcc -fPIC -shared -o math_func.so add_func.c sub_func.c
编译main函数:
root@linux:~/code# gcc -o math_test math_test.c ./math.so
执行:
root@linux:~/code# ./math_test
a = 100 ,b = 50
a - b = 50
a + b = 150
动态链接库的使用 :
第一步,链接器需确认程序所需要的变量和函数名是否包含在程序或者是动态链接库中。
第二部,程序运行的时,系统的动态加载器会检查哪些动态链接库需要连接到程序,从而将这些库文件载入内存。
方法/步骤
ubuntu 14.04 linux c
gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2
file 1: add_func.c
int add_func(int a,int b)
{
return a+b;
}
file 2: sub_func.c
int sub_func(int a ,int b)
{
return (a-b);
}
file 3 : math_test.c
#include <stdio.h>
int main(int argc,char *argv[])
{
int rc,a = 100,b=50;
printf("a = %d ,b = %d \n",a,b);
printf("a - b = %d \n",sub_func(a,b));
printf("a + b = %d \n",add_func(a,b));
return rc;
}
3
编译:
生成动态链接库 :
root@linux:~/code# gcc -fPIC -shared -o math_func.so add_func.c sub_func.c
编译main函数:
root@linux:~/code# gcc -o math_test math_test.c ./math.so
执行:
root@linux:~/code# ./math_test
a = 100 ,b = 50
a - b = 50
a + b = 150
追问
一看就是别处复制过来的,有意思吗!
追答
答案已给你,只是你看不懂而已,复制也是认真挑选出来的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询