最近又要写Linux下的程序了,时间长了,真有点忘记了.
整理了一点过去的东西,估计会用到.
内容当然如题了.
经历了多年windows下的编程,发现windows与Linux在很多方面还是有相似点的,呵呵,也不知道是谁学的谁的.
Linux下的动态连接库 当然不叫DLL的,叫Share Object.意思就不说了.
下面弄一个非常简单的例子.就用 加法运算吧
File add.c
int Add(int x,int y)
{
return x+y;
}
用CC搞下下.
gcc -shared Add.c -o add.so
会生成一个 add.so 的文件.这个,就是share object 了.
与Windows一样,可以放到系统目录下去,也可以放到当前目录下.
好了,DLL写完了.噢,错了,是share object写完了.
下边写一个调用的程序.
不多说了,一切从简吧.
file addtest.c
#include <stdlib.h>
#include <dlfcn.h>
int (*Add)(int x,int y);
int main()
{
void *dlhandle;
int i;
dlhandle = dlopen("./Add.so",RTLD_LAZY);
if(dlhandle == NULL)
{
printf(" Load Dll Error:%s",dlerror());
return 0;
}
Add = dlsym(dlhandle,"Add");
if(Add == NULL)
{
printf("load function Add Error\n");
dlclose(dlhandle);
return 0;
}
for(i = 0;i<100;i++)
printf("%i+%i = %i\n",i,i,Add(i,i));
return 0;
}
OK,这样就可以了,下面编译一下吧.这儿可要注意了.与平时有点不同.
cc addtest.c -ldl -s -rdynamic 后两个参数也可以不用,第一个是省不得的.因为他要让CC多弄些东西到程序中去.
好了,运行一下吧.
cc addtest.c -ldl -s -rdynamic