前段时间需要完成多个模块业务,而这些模块的接口都是一样的,于是为了方便管理就把每个模块都根据接口封装成了SO库,这里就留下SO库调用样例

SO库源文件代码:

 //TestSo.c
#include <stdio.h> int CommonInterface(char* str, unsigned int strLen)
{
//deal with ...
printf("%s, %d\n", str, strLen);
return ;
}

编译命令:

gcc -shared -o TestSo.so TestSo.c
 
使用库代码:
 //Main.c
#include <stdio.h>
#include <dlfcn.h> typedef int (*CommonInterface_Func)(char* str, unsigned int strLen); #define TEST_SO_FILE "/root/test/libtestSo.so"
void* soHandle = NULL; /* get dynamic library function address, returns 1 success, otherwise fail. */
int getCommonInterfaceFuncAddr(CommonInterface_Func* funcAddr)
{
// laod dynamic library.
soHandle = dlopen(TEST_SO_FILE, RTLD_LAZY);
if ( soHandle == NULL )
{
printf("dlopen,(%s)", dlerror());
return ;
}
// get func addr
*funcAddr = (CommonInterface_Func)dlsym(soHandle, "CommonInterface");
if ( *funcAddr == NULL )
{
printf("dlsym,(%s)", dlerror());
dlclose(m_soHandle);
return ;
}
return ;
} int main(int argc, char* argv[])
{
char* str = "hello so.";
CommonInterface_Func funcAddr = NULL;
int result = getCommonInterfaceFuncAddr(&funcAddr); if (result != )
{
printf("get func address fail.\n");
return ;
}
printf("get func address success.\n");
result = funcAddr(str, strlen(str));
printf("exec func result : %d\n", result); return ;
}

编译命令:

gcc -o Main_exec Main.c -ldl

执行:./Main_exec

参考链接:http://www.cnblogs.com/leaven/archive/2010/06/11/1756294.html

C语言下动态库相互调用的更多相关文章

  1. Windows下动态库的编译以及调用

    1.MFC下生成动态库 1>显式调用 在.cpp文件里添加接口函数 int sum(int a,int b) { return a + b; } int sub(int a,int b) { r ...

  2. c++动态库封装及调用(2、windows下动态库创建)

    DLL即动态链接库(Dynamic-Link Libaray)的缩写,相当于Linux下的共享对象.Windows系统中大量采用了DLL机制,甚至内核的结构很大程度依赖与DLL机制.Windows下的 ...

  3. Linux下动态库生成和使用

    Linux下动态库生成和使用 一.动态库的基本概念 1.动态链接库是程序运行时加载的库,当动态链接库正确安装后,所有的程序都可以使用动态库来运行程序.动态链接库是目标文件的集合,目标文件在动态链接库中 ...

  4. Linux下动态库查找路径的问题

    说到和动态库查找路径相关的问题,总体上可以分为两类:    第一类: 通过源代码编译程序时出现的找不到某个依赖包的问题,而如果此时你恰好已经按照它的要求确确实实.千真万确.天地良心地把依赖库给装好了, ...

  5. 谈谈Linux下动态库查找路径的问题 ldconfig LD_LIBRARY_PATH PKG_CONFIG_PATH

    谈谈Linux下动态库查找路径的问题 ldconfig LD_LIBRARY_PATH  PKG_CONFIG_PATH 转载自:http://blog.chinaunix.net/xmlrpc.ph ...

  6. 谈谈Linux下动态库查找路径的问题

    学习到了一个阶段之后,就需要不断的总结.沉淀.清零,然后才能继续"上路".回想起自己当年刚接触Linux时,不管是用源码包编译程序,还是程序运行时出现的和动态库的各种恩恩怨怨,心里 ...

  7. [转]谈谈Linux下动态库查找路径的问题

    http://blog.chinaunix.net/uid-23069658-id-4028681.html 学习到了一个阶段之后,就需要不断的总结.沉淀.清零,然后才能继续“上路”.回想起自己当年刚 ...

  8. 深入理解LINUX下动态库链接器/加载器ld-linux.so.2

    [ld-linux-x86-64.so.2] 最近在Linux 环境下开发,搞了好几天 Compiler 和 linker,觉得有必要来写一篇关于Linux环境下 ld.so的文章了,google上搜 ...

  9. 转:谈谈Linux下动态库查找路径的问题

    http://blog.chinaunix.net/uid-23069658-id-4028681.html 学习到了一个阶段之后,就需要不断的总结.沉淀.清零,然后才能继续“上路”.回想起自己当年刚 ...

随机推荐

  1. 使用工具创建Ribbon的按钮

         来自为知笔记(Wiz)

  2. python-学习笔记之-Day5 双层装饰器 字符串格式化 python模块 递归 生成器 迭代器 序列化

    1.双层装饰器 #!/usr/bin/env python # -*- coding: utf-8 -*- # author:zml LOGIN_INFO = False IS_ADMIN = Fal ...

  3. Python学习笔记-Day3-python关键字

    1.and 逻辑与 2.assert 判断某个条件是否为真,如果为假,抛出错误 3.break跳出for,while循环 4.class 类定义 5.continue 跳出本次循环,执行下次循环 6. ...

  4. HDU(2485),最小割最大流

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2485 Destroying the bus stations Time Limit: 40 ...

  5. boost库学习之开篇

    本系列文章使用boost_1.58.0版本. 一.欢迎使用boost C++库 boost致力于提供一个免费的.便携的源代码级的库. 我们重视那些与C++标准一起工作良好的库.boost库将要成为一个 ...

  6. HashMap, HashTable, CurrentHashMap的区别

    转载:http://www.jianshu.com/p/c00308c32de4 HashMap vs ConcurrentHashMap 引入ConcurrentHashMap是为了在同步集合Has ...

  7. hdu 4961 Boring Sum

    Boring Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Tota ...

  8. js判断手机连接网络类型

    <!DOCTYPE HTML><html xmlns="http://www.w3.org/1999/xhtml" lang="en"> ...

  9. [美]莫提默 J. 艾德勒《如何阅读一本书》

      我最近在阅读一本书,这本书的书名叫<如何阅读一本书>(商务出版社,2015),顾名思义.   作者认为,阅读是一件跟写书一样复杂的活动,而许多人并不会阅读. 看过后,你可能会有“我真没 ...

  10. HDU 2289 CUP 二分

    Cup Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...