C代码中共享库编程和使用共享库(简单例子)
2009-05-13 08:00:01来源:未知 阅读 ()
使用共享库,必须在运行的时候能够找到共享库的位置。使用共享库的代码利用名字来定位共享库。
一个我学习的例子,出自《GCC技术参考大全》
1、生成共享库
代码:
/* sayhello.c */
#includestdio.h>
void sayhello()
{
printf("Hello from a loaded function.\n");
}
/* sayhello.c */
#includestdio.h>
void sayhello()
{
printf("Hello from a loaded function.\n");
}
使用下面的命令把这两个函数编译成位置独立代码,并用他们创建共享库 libsayfn.so
$ gcc -fpic -shared sayhello.c saysomething.c -o libsayfn.so
-fpic 生成可用于共享库的位置独立代码(PIC)
-shared 连接程序生成共享目标代码
-o 指定输出的名称
2、使用共享库
/* say.c */
#includedlfcn.h>
#includestdio.h>
int main(int argc,char *argv[])
{
void *handle;
char *error;
void (*sayhello)(void);
void (*saysomething)(char *);
handle = dlopen("libsayfn.so",RTLD_LAZY);
if(error = dlerror()) {
printf("%s\n",error);
exit(1);
}
sayhello = dlsym(handle,"sayhello");
if(error = dlerror()) {
printf("%s\n",error);
exit(1);
}
saysomething = dlsym(handle,"saysomething");
if(error = dlerror()) {
printf("%s\n",error);
exit(1);
}
sayhello();
saysomething("This is something");
dlclose(handle);
return 0;
}
这个程序包含dlfcn.h头文件,里面有dlopen(),dlsym(),dlerror(),dlclose()的定义。在编译时也需要使用dl库。具体的位置是
因为这个程序调用的是和代码同目录下的共享库,不在系统默认的库搜索路径,所以在编译时要特别指出。
$ gcc say.c -L. -Ldl -o say
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/12258/showart_291357.html
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:使用kdesvn同步kde代码
下一篇:一些KDE编程的资源
- freebsd系统共享上网问题! 2009-05-13
- Introducing NetBSD 5.0 by Andrew Doran 2009-05-13
- 见笑了,问一个很简单的问题 2009-05-13
- freebsd6+openvpn+nat转发共享上网无痛设置 2009-05-13
- portsnap的几种简单用法 2009-05-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash