码迷,mamicode.com
首页 > 编程语言 > 详细

c/c++ 编译so与动态加载so

时间:2014-11-24 22:28:41      阅读:315      评论:0      收藏:0      [点我收藏+]

标签:cc++ 编译so与动态加载so

c文件filea.c:

#include <stdio.h>
void fun1()
{
	printf("i am from filea fun1 \n");
}

c文件fileb.c:

#include <stdio.h>
void fun2()
{
	printf("i am from fileb fun2 \n");
}

测试文件testso.c

void fun1();
void fun2();
int main(int argc,char *argv[])
{
	fun1();
	fun2();
	return 0;
}


1.将filea.c fileb.c编译成so库供testso.c调用,命令如下:


gcc -Wall -fpic -shared filea.c fileb.c -o first.so

bubuko.com,布布扣



2.编译testso.c并链接共享库first.so

gcc -Wall testso.c first.so -o testso


bubuko.com,布布扣


3.执行。

此时,执行./testso 将会抛出./testso: error while loading shared libraries: first.so.0:cannot open shared object file: No such file or directory

程序 testso已经完成,但要运行它必须让其能定位到共享库 first.so,因为库中的函数要在程序运行时被加载。 需要注意的是,当前工作目录可能不在共享库的查找路径中,因此需要使用如下的命令行设定环境变量LD_LIBRARY_PATH:


 $ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./


再次执行./testso,输出正确结果:

bubuko.com,布布扣





c/c++ 编译so与动态加载so

标签:cc++ 编译so与动态加载so

原文地址:http://blog.csdn.net/zz7zz7zz/article/details/41448987

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!