重明鸟软件知识平台
@C/C++动态库编程
继续以《c/c++生成静态库》的add.cpp为例子。要编译动态库只要修改下编译命令就可以了。
g++ -m64 add.cpp -fPIC -shared -o add.so


动态库调用有编译时调用的隐式调用和另一种是使用过程中加载的显式调用两种。
一、隐式调用
g++ main.cpp -L./ -ladd -o main -Wl,--rpath=/mydisk/dev/dll


二、显式调用
显式调用要修改add.h和main.cpp源文件。
add.h源文件
#ifndef add_fun
#define add_fun
 
#include <stdio.h>
 
extern "C" {
        int add(int a,int b);
}
 
#endif


main.cpp源文件
#include <stdio.h>
#include <dlfcn.h>
 
int main()
{
    typedef int (*tfun)(int,int);
 
    char *err = NULL;
 
    void* handle = dlopen("./libadd.so",RTLD_NOW);
 
    if(!handle)
    {
        printf("error:%s",dlerror());
        return 1;
    }
 
    dlerror();
 
    tfun add_fun = (tfun)dlsym(handle,"add");
 
    err=dlerror();
 
    if(err)
    {
        printf("find add fun error:%s",err);
        return 1;
    }
 
    printf("12+23=%d",add_fun(12,23));
 
    dlclose(handle);
    return 1;
}


编译指令
1、so文件照旧编译。

2、main.cpp编译如下:g++ -o main main.cpp -ldl
@站内查找
@栏目文章
【基础教程】Python守护进程创建
【基础教程】PyGame(13):三维环境设置
【基础教程】C/C++指针函数和回调函数
【基础教程】C/C++多进程编程(3)
【基础教程】C/C++多进程编程(2)
【基础教程】C/C++多进程编程(1)
【基础教程】C/C++多线程编程(2)
【基础教程】C/C++多线程编程(1)
【基础教程】C/C++动态库编程
【基础教程】C/C++静态库编程
【基础教程】photoshop图片混合公式
【基础教程】PyGame(12):旋转和缩放
【基础教程】PyGame(11):Surface操作
【基础教程】网络编程:Epoll(2)
【基础教程】网络编程:Epoll(1)
【基础教程】网络编程:IOCP(3)
【基础教程】网络编程:IOCP(2)
【基础教程】网络编程:IOCP(1)
【基础教程】网络编程:UDP
【基础教程】网络编程:TCP
【基础教程】Ubuntu安装Hadoop(4)
【基础教程】Ubuntu安装Hadoop(3)
【基础教程】Ubuntu安装Hadoop(2)
【基础教程】Ubuntu安装Hadoop(1)
【基础教程】Hadoop技术原理
【基础教程】Hadoop基本命令
【基础教程】Hadoop是什么东西
【基础教程】排序算法介绍
【基础教程】PyGame(10):声音控制
【基础教程】PyGame(9):鼠标事件(2)
【基础教程】PyGame(8):鼠标事件(1)
【基础教程】PyGame(7):键盘事件(2)
【基础教程】PyGame(6):键盘事件(1)
【基础教程】PyGame(5):显示图片
【基础教程】PyGame(4):显示文字
【基础教程】PyGame(3):图元绘制
【基础教程】PyGame(2):游戏框架
【基础教程】PyGame(1):开发环境搭建
【基础教程】Python(10):类定义
【基础教程】Python(9):自定义模块
【基础教程】Python(8):输入输出控制
【基础教程】Python(7):函数定义
【基础教程】Python(6):中断语句
【基础教程】Python(5):判断语句
【基础教程】Python(4):循环语句
【基础教程】Python(3):变量与运算符
【基础教程】Python(2):Hello
【基础教程】Python(1):介绍与安装
Copyright @ 2011-2018 by szc  桂ICP备11003301号-1  桂公网安备45040302000027号  Email:szcsoft@qq.com