前段时间需要完成多个模块业务,而这些模块的接口都是一样的,于是为了方便管理就把每个模块都根据接口封装成了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. Hibernate jar包详解

    Hibernate一共包括了23个jar包,令人眼花缭乱.本文将详细讲解Hibernate每个jar包的作用,便于你在应用中根据自己的需要进行取舍. 下载Hibernate,例如2.0.3稳定版本,解 ...

  2. 20150603_Andriod 多个窗体数据回调

    package com.example.test1; import android.support.v7.app.ActionBarActivity;import android.os.Bundle; ...

  3. cmake安装的软件要怎么卸载

    找到make install之后产生的这个文件install_manifest.txt里面有安装的所有东西的路径,删除它们即可.参考命令:cat install_manifest.txt | sudo ...

  4. 2016年12月10日 星期六 --出埃及记 Exodus 21:5

    2016年12月10日 星期六 --出埃及记 Exodus 21:5 "But if the servant declares, `I love my master and my wife ...

  5. Intent官方教程(3)各属性介绍

    Building an Intent An Intent object carries information that the Android system uses to determine wh ...

  6. Hashtable与ConcurrentHashMap区别

    Hashtable与ConcurrentHashMap区别 ConcurrentHashMap融合了hashtable和hashmap二者的优势. hashtable是做了同步的,是线性安全的,(2) ...

  7. mysqldump命令

    mysqldump命令 mysqldump命令是mysql数据库中备份工具,用于将MySQL服务器中的数据库以标准的sql语言的方式导出,并保存到文件中. 语法 mysqldump(选项) 选项 -- ...

  8. 【转】JSP总结

    day1 JSP 定义:     1)Java Server Page, Java EE 组件,本质上是 Servlet.     2)运行在 Web Container.接收 Http Reques ...

  9. ubuntu下php xdebug的安装(配置)

    首先Xdebug要和php版本对应,具体查看官网    https://xdebug.org/ xdebug-2.1.0PHP Version 5.3.10linux下解压xdebug包.1.进入xd ...

  10. [python]实现单机版一行wordcount

    用过spark,对wordcount这个演示程序记忆犹新,于是想试着实现一个简单的wordcount.又因为在学习函数式编程,希望可以把数据看成一个整体,在现有的函数上进行操作.于是就有了这一行代码. ...