<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>新的开始 &#187; 插件</title>
	<atom:link href="http://www.wangtianqi.com/blog/tag/%e6%8f%92%e4%bb%b6/feed" rel="self" type="application/rss+xml" />
	<link>http://www.wangtianqi.com/blog</link>
	<description>每一天都是新的开始</description>
	<lastBuildDate>Mon, 12 Sep 2011 10:42:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>linux程序如何支持插件</title>
		<link>http://www.wangtianqi.com/blog/190</link>
		<comments>http://www.wangtianqi.com/blog/190#comments</comments>
		<pubDate>Mon, 27 Jul 2009 09:01:21 +0000</pubDate>
		<dc:creator>czyhd</dc:creator>
				<category><![CDATA[程序设计]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[插件]]></category>
		<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.wangtianqi.com/190</guid>
		<description><![CDATA[今天小猴同学在研究这个，我也看了下。

给两段代码

1，插件部分，so.c

<span class="readmore"><a href="http://www.wangtianqi.com/blog/190" title="linux程序如何支持插件">阅读全文——共550字</a></span>]]></description>
			<content:encoded><![CDATA[<p>今天小猴同学在研究这个，我也看了下。</p>
<p>给两段代码</p>
<p>1，插件部分，so.c</p>
<blockquote><p>int add( int a, int b){<br />
return a+b;<br />
}</p></blockquote>
<p>编译</p>
<p>gcc -c -fPIC so.c</p>
<p>gcc -shared -fPIC so.o -o so.so</p>
<p><span id="more-190"></span></p>
<p>2,主程序部分，main.c</p>
<blockquote><p>#include &lt;stdio.h&gt;<br />
#include &lt;dlfcn.h&gt;<br />
int (*add)(int x,int y);<br />
int main(){<br />
int a,b;<br />
char so_filename[20]=”./so.so”;<br />
void *p;<br />
char *error;<br />
p=dlopen(so_filename,RTLD_LAZY);<br />
if (p==NULL){<br />
fprintf(stderr,dlerror());<br />
return 2;<br />
}<br />
add=dlsym(p,”add”);<br />
error=dlerror();<br />
if (error){<br />
fprintf(stderr,error);<br />
return 3;<br />
}<br />
scanf(“%d %d”,&amp;a,&amp;b);<br />
printf(“%d+%d=%d.\n”,a,b,add(a,b));<br />
dlclose(p);<br />
return 0;<br />
}</p></blockquote>
<p>编译：</p>
<p>gcc main.c -ldl -o main</p>
<p>注意要加-ldl</p>
<p>源程序要包含dlfcn.h头，用dlopen装载插件，用dlsym来找到函数add的地址，然后调用就好<code><span style="color: #000000;"></span></code></p>
<h3  class="related_post_title">相关主题</h3><ul class="related_post"><li><a href="http://www.wangtianqi.com/blog/236" title="linux下安装rt3070驱动">linux下安装rt3070驱动</a></li><li><a href="http://www.wangtianqi.com/blog/207" title="Linux下密码很脆弱">Linux下密码很脆弱</a></li><li><a href="http://www.wangtianqi.com/blog/183" title="升级了一下显卡驱动">升级了一下显卡驱动</a></li><li><a href="http://www.wangtianqi.com/blog/174" title="安装内核的一个错误">安装内核的一个错误</a></li><li><a href="http://www.wangtianqi.com/blog/171" title="关于内核编译">关于内核编译</a></li><li><a href="http://www.wangtianqi.com/blog/169" title="ubuntu 9.04的优化">ubuntu 9.04的优化</a></li><li><a href="http://www.wangtianqi.com/blog/162" title="突然发现swap分区的利用率太低了">突然发现swap分区的利用率太低了</a></li><li><a href="http://www.wangtianqi.com/blog/148" title="ubuntu下制作ISO镜像文件">ubuntu下制作ISO镜像文件</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.wangtianqi.com/blog/190/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

