技术宅的结界

 找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 731|回复: 1
收起左侧

对比linux和windows关于动态链的使用

[复制链接]

271

主题

445

帖子

4760

积分

用户组: 真·技术宅

UID
2
精华
61
威望
148 点
宅币
3583 个
贡献
131 次
宅之契约
0 份
在线时间
614 小时
注册时间
2014-1-25
发表于 2016-5-15 18:18:24 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有帐号?立即注册→加入我们

x
windows上存在2种方式实现b.dll/b.exe使用a.dll中的函数void func()
1.编译时确定,使windows在加载和解析(b.dll/b.exe)导入表的时候自动加载a.dll,分2步
添加函数声明:void func();(extern 及 __declspec(dllimport)可选)  
引入导入lib:#pragma comment(lib, "a.lib")                           ——注意导入lib和静态lib的区别
2.运行时获取,这种方式可以在(b.dll/b.exe)执行的任意时刻加载a.dll并调用函数,也分2步
将模块加载到内存或获取已有模块 HMODULE hmod = LoadLibrary("a.dll",.....)/GetModuleHandle("a.dll")
获取函数并执行 typedef void (*F)();F func=(F)GetProcAddress(hmod,"func");func();

android linux上,并不把特定函数归于某个模块,它存在一个模块链,从第一个so开始遍历,直到找到函数为止
同样分2种方式实现b/b.so使用a.so中的函数void func()     下面的方法都是采用ndk
1.编译时确定——这个是我要重点说的,因为网上资料较少,分系统函数和用户函数
①用户函数——自己从网上down的,或自己写的导出函数的so
Android.mk中编写配置
LOCAL_SRC_FILES := a.cpp
LOCAL_MODULE := a
LOCAL_MODULE_FILENAME := a
include $(BUILD_SHARED_LIBRARY)

LOCAL_SRC_FILES := b.cpp
LOCAL_MODULE := b
LOCAL_MODULE_FILENAME := b
LOCAL_SHARED_LIBRARIES := liba      #导入a的函数
include $(BUILD_SHARED_LIBRARY)

这样就可以让b去用a的导出函数
b.cpp中仍然要包含a的函数声明

②系统函数——ndk自带的库函数,包括stl,log等
Android.mk中编写配置
LOCAL_SRC_FILES := b.cpp
LOCAL_MODULE := b
LOCAL_MODULE_FILENAME := b
LOCAL_LDLIBS := -llog      #导入liblog.so中的函数
include $(BUILD_SHARED_LIBRARY)
再包含android/log.h即可

系统自带的库参见%NDK%\build\core\build-binary.mk
system_libs := \
    android \
    c \
    dl \
    jnigraphics \
    log \
    m \
    m_hard \
    stdc++ \
    z \
    EGL \
    GLESv1_CM \
    GLESv2 \
    GLESv3 \
    OpenSLES \
    OpenMAXAL \
    bcc \
    bcinfo \
    cutils \
    gui \
    RScpp \
    RScpp_static \
    RS \
    ui \
    utils \
    mediandk \
    atomic

2.动态加载,这和windows类似,分2步
int hmod = dlopen("/system/lib/a.so",
typedef void (*F)();F func=(F)dlsym(hmod,"func");func();

0

主题

9

帖子

5026

积分

用户组: 技术宅的结界VIP成员

UID
2869
精华
0
威望
1 点
宅币
5015 个
贡献
0 次
宅之契约
0 份
在线时间
9 小时
注册时间
2017-9-15
发表于 2017-9-19 11:22:04 | 显示全部楼层
现在支持 CMakefile  了   会更新吗

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|技术宅的结界 ( 滇ICP备16008837号|网站地图

GMT+8, 2019-2-19 14:43 , Processed in 0.097595 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表